我一直在读关于批量重命名、更改前缀并会尝试使用我自己的文件。
在这种情况下,我想将Old
其删除并替换为New
测试文件
01. Old Name.txt
02. Old Name.txt
03. Old Name.txt
尝试1
for f in *.txt
do
mv "$f" "New${f#Old}"
done
输出1
New01. Old Name.txt
New02. Old Name.txt
New03. Old Name.txt
尝试2
for i in *.txt
do
mv ${i} ${i/#Old/New}
done
输出 2(无变化)
user@linux:~$ for i in *.txt
> do
> mv ${i} ${i/#Old/New}
> done
mv: target 'Name.txt' is not a directory
mv: target 'Name.txt' is not a directory
mv: target 'Name.txt' is not a directory
user@linux:~$
我的解决方案有什么问题?
所需输出
01. New Name.txt
02. New Name.txt
03. New Name.txt
答案1
引用你的变量。另外,在使用之前
${i/Old/New}
不要使用井号字符 (#
)Old
。强制#
匹配从文件名的开头开始,但没有一个文件以 开头Old
,它们都以0
.$ touch "01. Old Name.txt" "02. Old Name.txt" "03. Old Name.txt" $ for i in *.txt ; do mv -v "$i" "${i/Old/New}" ; done renamed '01. Old Name.txt' -> '01. New Name.txt' renamed '02. Old Name.txt' -> '02. New Name.txt' renamed '03. Old Name.txt' -> '03. New Name.txt'
安装并使用 perl
rename
实用程序(例如sudo apt-get install rename
在 debian 及其衍生产品上)。这比 DIY 批量重命名要好得多。