我想重命名同一目录中的 MP3 列表,例如:
001 - toto1.mp3
002 - toto3.mp3
003 - toto5.mp3
004 - toto7.mp3
005 - toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3
我尝试了这个命令示例:
for i in *.mp3 ; do echo "${/[0-9]-/i}" ; done
我有
bash: ${/[0-9]-/i}: bad substitution
我想要这个结果:
toto1.mp3
toto3.mp3
toto5.mp3
toto7.mp3
toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3
谢谢
答案1
您已i
为循环中的每个文件名设置了一个变量,但是参数扩展${
期望在;之后立即看到变量名称相反,您将它放在最后,就在右花括号之前。
由于您只想删除文件名前面的文本,因此请使用以下语法:
for i in *.mp3 ; do echo "${i#[0-9][0-9][0-9] - }" ; done
这将删除任何 3领导数字后跟空格短划线空格。
答案2
提及文件 test.txt 中的所有文件名
$ cat test.txt
001 - toto1.mp3
002 - toto3.mp3
003 - toto5.mp3
004 - toto7.mp3
005 - toto9.mp3
toto10.mp3
toto35.mp3
toto59.mp3
toto75.mp3
以下命令将搜索有问题的文件并将其重命名为正确的名称
cat test.txt | sed -n '/^0\{2\}/p' | awk '{print "mv" " " $0 " " $3}' |
sed "s/ /&'/1" | sed "s/.mp3/&'/1" | sh
toto1.mp3
toto3.mp3
toto5.mp3
toto7.mp3
toto9.mp3