Linux命令为目录中的所有文件提供文件扩展名

时间:2011-11-19 03:35:38

标签: linux bash

我想出了这个:

for i in *; 
do input=`echo $i|sed -e 's/[ ]/\\\ /g'`; 
output=`echo $input".mp3"`; 
mv $input $output; done

非常接近,但它抱怨道:

  

mv:无效选项 - '\'

我不明白为什么如果我尝试回显$ input或$ output它们将无法正常工作,它们似乎都正确地逃避了文件名中的所有空格而已。

5 个答案:

答案 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/Quoteshttp://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
相关问题