截断下划线后的目录中的所有文件?

截断下划线后的目录中的所有文件?

我有一个目录,里面有几千张图片。其中大部分都有合理的文件名,如 SD-000.tif、SD-001.tif、BX-000.tif 等...

然而其中约 25% 可能有类似 BX-003_old.tif BX-004_veryold.tif 的名称。

如何通过删除每个文件末尾的 _word 来重命名问题文件?

文件存储在 FreeBSD 服务器上,但目录通过 samba 共享。

我尝试使用 sed 和 awk 的组合,但却无法让它们仅处理文件的中间部分。

有人有什么想法吗?

答案1

newname=${filename%_*}.${filename##*.}

${filename%_*} 给出最后一个下划线之前的部分。
${filename##*.} 给出最后一个点之后的部分(扩展名)。

答案2

为了防止将来有人遇到类似的问题,我最终使用 cut 命令修复了这个问题。我运行了:

for i in *
do
mv $i `echo $i|cut -d"_" -f1`
done

循环只是选择当前目录中的所有文件,cut -d 指定截断指定字符后的所有内容。在我的例子中是 _。

相关内容