[英]Change file extensions of multiple files in a directory with terminal/bash?
我正在開發一個簡單的launchdaemon,它將文件從一個目錄復制到另一個目錄。 我已經把文件轉移得很好了。
我只是希望目錄中的文件是.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並保持文件名。
想法? 建議?
嘗試:
for file in *.dat; do mv "$file" "${file%dat}mp3"; done
或者,如果你的shell有它:
rename .dat .mp3 *.dat
現在,為什么你的命令不起作用:首先,當你將命令重命名為*.mp3
時,你的目錄中只有一個文件,否則mv
會因*.mp3: not a directory
而失敗*.mp3: not a directory
。
並且mv不會對文件globs做任何魔術,它是擴展globs的shell 。 這意味着,如果您在目錄中有此文件:
t.dat
然后你輸入:
mv *.dat *.mp3
shell會將*.dat
擴展為t.dat
。 但是,因為沒有任何東西可以匹配*.mp3
,所以shell會保持原樣,這意味着完全展開的命令是:
mv t.dat *.mp3
這將創建一個名為*.mp3
的文件。
另一方面,如果您有幾個名為*.dat
文件,如下所示:
t1.dat t2.dat
該命令將擴展為:
mv t1.dat t2.dat *.mp3
但這會失敗:如果mv
有兩個以上的參數,它希望最后一個參數(即*.mp3
)是一個目錄。
對於Mac上的任何人來說,如果你有BREW,這很容易,如果你沒有釀造,那么我的建議是得到它。 然后安裝時只需這樣做
$ brew install rename
然后一旦重命名只安裝類型(在文件所在的目錄中)
$ rename -s dat mp3 *
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.