我有一个文件列表:
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
答案 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