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



我如何重命名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新手,不知道怎么做

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

最新更新