我想出了這個文件擴展名:Linux命令給目錄中的所有文件
for i in *;
do input=`echo $i|sed -e 's/[ ]/\\\ /g'`;
output=`echo $input".mp3"`;
mv $input $output; done
它非常接近,但MV抱怨:
MV:無效選項 - 「 \'
我不明白爲什麼它不起作用,如果我嘗試echo $輸入或$輸出,他們似乎都正確地轉義文件名中的所有空格,沒有更多。
我想出了這個文件擴展名:Linux命令給目錄中的所有文件
for i in *;
do input=`echo $i|sed -e 's/[ ]/\\\ /g'`;
output=`echo $input".mp3"`;
mv $input $output; done
它非常接近,但MV抱怨:
MV:無效選項 - 「 \'
我不明白爲什麼它不起作用,如果我嘗試echo $輸入或$輸出,他們似乎都正確地轉義文件名中的所有空格,沒有更多。
看起來你是大量過於複雜與您使用的sed
(和echo
)這個......
你試圖逃跑文件名中的空格字符,但你真的只是需要用引號括起文件名。你可以簡單地做......
for i in *; do
mv "${i}" "${i}.mp3"
done
find . -type f -exec mv "{}" "{}.mp3" \;
這子目錄更改文件,以及可能會或可能不會是什麼OP想。問題示例不會遍歷目錄。限制爲當前目錄使用'-maxdepth'選項。 –
更短,更安全:
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被盜)
使用rename,它使這些事情很簡單:
rename 's/$/.mp3/' *
你應該照顧不同版本的重命名。這是perl之一。如果命令「file $(type -p rename)」顯示「ELF」,則表示錯誤;) –
for i in *; do mv -- ${i}{,.mp3};done
謝謝。它看起來像我的東西是複雜的。 :-) –
當然,如果文件名中有引號,這將不起作用; -P。而且由於bash使用空格來分隔數組元素,因此使用空格的文件名會嚴重破壞它。 – Borealid