簡體   English   中英

使用terminal / bash更改目錄中多個文件的文件擴展名?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM