2011-12-18 102 views
8

我正在開發一個簡單的launchdaemon,將文件從一個目錄複製到另一個目錄。我已經獲得了文件傳輸的罰款。用終端/ bash更改目錄中多個文件的文件擴展名?

我只是想在目錄中的文件是mp3的,而不是.dat文件的

某些文件是這樣的:

6546785.8786.dat
3678685.9834.dat
4658679.4375。 DAT

我希望他們看起來像這樣:

6546785.8786.mp3
3678685.9834.mp3
4658679.4375.mp3

這是我在bash腳本結束重命名的文件擴展名。

cd $mp3_dir 
mv *.dat *.mp3 
exit 0 

問題是文件出來爲* .MP3,而不是6546785.8786.mp3

,當另一6546785.8786.dat文件導入到$ mp3_dir中,* .MP3改寫爲新.MP3

我需要重命名只是將.dat文件擴展名爲.mp3並保留文件名。

想法?建議?

回答

27

嘗試:

for file in *.dat; do mv "$file" "${file%dat}mp3"; done 

或者,如果你的shell有它:

rename .dat .mp3 *.dat 

現在,爲什麼你的命令沒有工作:首先,它比肯定的是,你只當它重命名爲*.mp3時,在您的目錄中有一個文件,否則mv將會因爲*.mp3: not a directory而失敗。

而mv並沒有對文件進行任何魔術,它是shell它擴大了球體。這意味着,如果你有在目錄這個文件:

t.dat 

,並鍵入:

mv *.dat *.mp3 

外殼將擴大到*.datt.dat。然而,由於沒有將匹配*.mp3,外殼會離開原樣,這意味着完全展開的命令是:

mv t.dat *.mp3 

這將創建一個名爲文件,從字面上看,*.mp3

如果,另一方面,你有幾個文件命名爲*.dat,如:

t1.dat t2.dat 

命令會擴展爲:

mv t1.dat t2.dat *.mp3 

但這將失敗:如果有兩個以上的參數mv,它期望最後一個參數(即*.mp3)是一個目錄。

+0

這偉大的工作。我發誓我認爲我在整個互聯網上搜索了正確的答案。非常感謝。現在我需要弄清楚如何將這個.mp3的名稱自動命名爲歌曲的名稱。 – CokePokes 2011-12-18 13:35:41

+0

沒問題:)另請參閱編輯,有另一個更好的命令來做到這一點。並且不要忘記接受答案;) – fge 2011-12-18 13:36:29

+3

+1。如果您將變量放入「doublequote」中,它也適用於帶空格的文件名。 – 2011-12-18 21:34:06

15

對於Mac上的任何人,如果你有BREW,這很容易,如果你沒有釀造,那麼我的建議是得到它。然後只需安裝時只需做到這一點

$ brew install rename 

那麼一旦改名,安裝只需輸入(在該文件的目錄)

$ rename -s dat mp3 *