使用bash重命名多个文件名

使用bash重命名多个文件名,bash,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 N

我有一个文件列表:

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
命令的用法(对于我尝试编辑的每个文件):


我错在哪里?当运行
for I in*时,我没有遇到任何问题;do echo${i#*'da-};完成

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

变成

 mv Mano Negra - Amerika Perdida - 01 - Mano Negra.mp3 "01 - Mano Negra.mp3"
这不是您想要的,您只需要接收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

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

变成

 mv Mano Negra - Amerika Perdida - 01 - Mano Negra.mp3 "01 - Mano Negra.mp3"
这不是您想要的,您只需要接收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

尝试
“$i”
而不是
$i
,或者
mv
将看到许多参数。另外,您可能对Perl实用程序感兴趣(基于Debian的发行版,如Ubuntu,在Perl包中有它)!尝试
“$i”
而不是
$i
,或者
mv
将看到许多参数。另外,您可能对Perl实用程序感兴趣(基于Debian的发行版,如Ubuntu,在Perl包中有它)!