2009-07-10 139 views
80

我有幾個目錄和子目錄包含文件沒有文件擴展名。我想將.jpg添加到這些目錄中包含的所有文件。我見過用於更改文件擴展名的bash腳本,但不是僅僅添加文件擴展名。它也需要遞歸,有人可以幫忙嗎?遞歸添加文件擴展名到所有文件

回答

176

替代命令(man find):

find . -type f -exec mv '{}' '{}'.jpg \; 

說明:這個遞歸找到的所有文件(-type f)從當前目錄(.)開始,並應用移動命令(mv)到各他們。還請注意{}附近的引號,這樣可以正確處理帶空格的文件名(甚至是換行符......)。

4

這樣,

for f in $(find . -type f); do mv $f ${f}.jpg; done 

我不希望你有空間分隔的文件名,
如果你這樣做,該名稱將需要處理一下。

如果你想從其他目錄下執行命令,
可以更換find .find /target/directory。沒有明確的循環

+1

這是缺少'do',如果文件名中有空格,最好引用文件名: for f in $(find。-type f);做mv「$ f」「$ {f} .jpg」;完成 – DrAl 2009-07-10 09:18:51

+0

,據推測我會從頂級目錄內運行? – robjmills 2009-07-10 09:19:27

+0

@seengee:是的。請注意,該命令也會忽略`-type`中的短劃線。 – Stephan202 2009-07-10 09:21:01

49

這將查找沒有擴展名,並添加您的.jpg

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \; 
0

rename

不知道,它可以在不擴展重命名文件(我是在Windows 7現在)

9

這有點晚了,但我想我會補充說,一個更好的解決方案(儘管可能不太可讀)比迄今爲止的可能是:

find /path -type f -not -name "*.*" -print0 | xargs -0 rename 's/(.)$/$1.jpg/' 

使用find | xargs模式通常會導致更高效的執行,因爲您不必爲每個文件分叉一個新進程。

請注意,這需要Debian風格的發行版(aka prename)中找到的重命名版本,而不是傳統的重命名。不過,這只是一個小小的perl腳本,因此在任何系統上使用上面的命令都會很容易。

0

重命名的所有文件在Windows基本沒有擴展,你可以做ren * *.jpg 由於文件沒有擴展名,只需要用*,或者如果你想改變PNG爲JPG 使用ren *.png *.jpg

相關問題