07 March, 2009

用 bash 及 mv 換檔名

JeffHung 寫了一篇文章介紹 用 find、sed、xargs 及 mv 換檔名,其實我還蠻常遇到這個問題的, 底下介紹我的做法。假設現在想要把下面第一欄的檔名換成第二欄的檔名
a.vcproj -> a.vc9.vcproj
b.vcproj -> b.vc9.vcproj
a.vcproj -> c.vc9.vcproj
其實只要用 bash 寫一個 for 迴圈就解決了
for x in *vcproj
do
     mv $x ${x%%vcproj}vc9.vcproj
done
硬是要寫成一行也可以
for x in *vcproj; do mv $x ${x%%vcproj}vc9.vcproj; done

*vcproj 代表所有結尾是 vcproj 的檔名, $x 代表所取到檔名的其中一個,問題來了怎樣取得副檔名前面的部分呢? 利用 bash 所提供的 Shell Parameter Expansion,可以輕鬆地達到這個目的, ${x%%vcproj} 代表 $x 從後面扣掉 vcproj 所剩下的部分。

註:在測試 for 迴圈時,可以先把 mv 改成 echo, 這樣可以避免誤改檔名的麻煩。

No comments: