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