2015-08-28 65 views
1

我正在嘗試編寫一個腳本來使用find命令將目錄樹中的所有文件複製到另一個目錄。但是,某些文件與其他文件具有相同的名稱。由於我根本不感興趣的文件名,我認爲最簡單的解決辦法是將複製的數字作爲名稱。 我試圖與此命令:Bash:使用find查找文件,用漸進號命名它們

i=0 

find . -iname "*.jpg" -exec cp {} $DEST_DIR/$i ; i=$i+1; 

然而,此命令顯然不會工作,因爲-exec運行在其中沒有定義變量i子外殼。 有沒有人有一些想法做到這一點,最好找到?還有其他更好的方法嗎?

+1

只需使用'--backup'爲'cp'沒有文件,讓它重命名文件嗎? –

+0

我的cp版本(在Mac OS X上)不提供此選項 – Ajeje

回答

1
i=0; find . -iname "*.jpg" | while IFS= read -r f; do echo "$f" "$i"; i=$((i + 1)); done 

...假設有在他們的名字空間,這樣

+1

這應該適用於任何不含新行的文件名,並且可以在仔細使用'-print0'並調整'read'命令的情況下處理這種情況。 (我認爲'IFS = read -d''-r f'就足夠了。) – chepner

+0

如果增量在使用前發生(文件從1開始),那麼前導'i = 0'並不是那麼有用。它不會被循環改變。 –