用bash重命名多个文件名

乔治

我有一个文件列表:

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

我想这样重命名它们:

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

鞋带

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章