用bash重命名多个文件名

时间:2015-09-03 13:02:03

标签: bash

我有一个文件列表:

01 - Mano Negra.mp3
02 - Mala Vida.mp3
03 - Amerika Perdida.mp3
04 - Peligro.mp3
[etc...]

我希望像这样重命名:

for i in *; do mv $i "`echo ${i#*'da - '}`"; done

但是当我跑步时

mv

我得到的只是usage: mv [-f | -i | -n] [-v] source target mv [-f | -i | -n] [-v] source ... directory usage: mv [-f | -i | -n] [-v] source target mv [-f | -i | -n] [-v] source ... directory usage: mv [-f | -i | -n] [-v] source target mv [-f | -i | -n] [-v] source ... directory usage: mv [-f | -i | -n] [-v] source target mv [-f | -i | -n] [-v] source ... directory [etc...] 命令的用法(对于我尝试编辑的每个文件):

for i in *; do echo ${i#*'da - '}; done

我哪里错了?运行setBounds

时,我没有遇到任何问题

1 个答案:

答案 0 :(得分:0)

你的问题是你的输入文件中有空格.. 所以

for i in *; do mv $i "`echo ${i#*'da - '}`"; done

变成

 mv Mano Negra - Amerika Perdida - 01 - Mano Negra.mp3 "01 - Mano Negra.mp3"

这不是你想要的,你需要mv只接收2个参数..即

 mv "Mano Negra - Amerika Perdida - 01 - Mano Negra.mp3" "01 - Mano Negra.mp3"

所以问题的解决方案是将$ i更改为" $ i"因为你已经引用了第二个论点。

for i in *; do mv "$i" "`echo ${i#*'da - '}`"; done