我想出了这个:
for i in *;
do input=`echo $i|sed -e 's/[ ]/\\\ /g'`;
output=`echo $input".mp3"`;
mv $input $output; done
非常接近,但它抱怨道:
mv:无效选项 - '\'
我不明白为什么如果我尝试回显$ input或$ output它们将无法正常工作,它们似乎都正确地逃避了文件名中的所有空格而已。
答案 0 :(得分:9)
find . -type f -exec mv "{}" "{}.mp3" \;
答案 1 :(得分:4)
您使用sed
(以及echo
)看起来大概过于复杂了......
您正试图在文件名中转义空格字符,但实际上您只需要将文件名括在引号中。你可以简单地做......
for i in *; do
mv "${i}" "${i}.mp3"
done
答案 2 :(得分:2)
更短更安全:
for i; do
mv -- "${i}" "${i}.mp3"
done
=)
--
负责以破折号开头的文件
和 for i in *
缩短为 for i
使用更多报价:它们至关重要。另外,了解'
,"
和`之间的区别。请参阅http://mywiki.wooledge.org/Quotes和http://wiki.bash-hackers.org/syntax/words。 (判决从IRC freenode #bash中窃取)
答案 3 :(得分:1)
使用 rename ,它使这些事情变得非常简单:
rename 's/$/.mp3/' *
答案 4 :(得分:1)
for i in *; do mv -- ${i}{,.mp3};done