Bash - 重命名文件名的一部分

时间:2011-10-07 21:48:47

标签: bash filenames rename

我需要一些帮助,我的迷你脚本,修复,西班牙文件名与ISO_8859-1和/或部分名称,如"&#00243"

脚本在那里:http://www.pastebin.com/vT5Z2BqE

昨天有3件事,正在工作,我添加更多,不再工作了,我不明白为什么。

看,如果我在“Bash Shell”/“Gnome-Terminal”中使用该命令,如:

inukaze@Inukaze:~$ cd Filenames_to_fix 
inukaze@Inukaze:~/Filenames_to_fix$ 
inukaze@Inukaze:~/Filenames_to_fix$ expresion='&#00176'
inukaze@Inukaze:~/Filenames_to_fix$ sustituto='°'
inukaze@Inukaze:~/Filenames_to_fix$ ls *$expresion*
01 - La Espada del Augurio &#00176.avi

inukaze@Inukaze:~/Filenames_to_fix$ for i in $( ls $expresion ); do

> orig=$i
> dest=$(echo $i | sed -e "s/$expresion/$sustituto/")
> mv $orig $dest
> done

mv: no se puede efectuar stat' sobre «01»: No existe el fichero o el directorio 
mv: no se puede efectuarstat' sobre «-»: No existe el fichero o el directorio 
mv: no se puede efectuar stat' sobre «La»: No existe el fichero o el directorio 
mv: no se puede efectuarstat' sobre «Espada»: No existe el fichero o el directorio 
mv: no se puede efectuar stat' sobre «del»: No existe el fichero o el directorio 
mv: no se puede efectuarstat' sobre «Augurio»: No existe el fichero o el directorio 
mv: no se puede efectuar `stat' sobre «°»: No existe el fichero o el directorio

我需要,例如,为“ª”更改文件名“°”的一部分 某人/某人,可以解释为什么会出现这个错误,以及如何修复它?

我不想要交互模式,并且不想取代“扩展”我想“重命名”文件名的坏部分,其中有“好”字符:D。

谢谢你自述,对不起我的英文不好,谢谢你的任何帮助,你能不能给我这个剧本

3 个答案:

答案 0 :(得分:1)

你没有引用$ orig和$ dest,并且当文件名包含空格时会导致问题(mv被赋予文件名作为几个单独的参数(这就是为什么它会打印几个带有部分文件名的错误消息))。尝试使用

mv "$orig" "$dest"

代替。

答案 1 :(得分:0)

for循环使用空格作为分隔符。由于您的文件名包含空格,因此您需要更改用作分隔符的内容。

以下是使用findwhile

的等效内容
find . -maxdepth 1 -name "*${expresion}*" -print0 | while read -d $'\0' file
do
    orig="$file"
    dest=$(echo "$file" | sed -e "s/${expresion}/${sustituto}/")
    mv "$orig" "$dest"
done

但是,更好的解决方案可能是使用rename命令:

rename $expresion $sustituto *${expresion}*

答案 2 :(得分:0)

rename命令是否可用?

rename  $expresion $sustituto *$expresion*