在Unix中使用部分文件名重命名文件

omqzjyyz  于 2022-11-23  发布在  Unix
关注(0)|答案(1)|浏览(207)

我如何在Unix中用文件名的一部分来重命名文件夹中的所有文件?基本上我想用第一个连字符前的字符串来重命名文件。
当前文件名格式:

ABC_XYZ-2022-11-09_07.52.03.csv
ABCD_XYZ-2022-11-09_07.52.03.csv
ABCDEF_XY-2022-11-09_07.52.03.csv

所需格式:

ABC_XYZ.csv
ABCD_XYZ.csv
ABCDEF_XY.csv

我是Unix新手,不知道如何操作

ct3nt3jp

ct3nt3jp1#

for i in *.csv
do
    mv -i "$i" "${i%%-*}".csv
done

${i%%-*}是变量i的值,从变量的末尾删除了与-*匹配的最长字符串。这也删除了.csv或任何其他.*结尾。
我使用mv -i来得到一个提示,以防目标文件已经存在。如果两个文件名只在日期/时间部分不同,就可能发生这种情况。
如果您希望保留具有不同结尾的文件,POSIX兼容解决方案可能会变得有点复杂。
如果所有文件在要删除的部分后都包含.,并且使用bash,则还可以使用

for i in *
do
    mv -i "$i" "${i/-*./.}"
done

相关问题