我有很多文件的名字以'_100.jpg'結尾。它們在嵌套的文件夾/子文件夾中傳播。現在我想要一個詭計遞歸地複製和重命名所有這些後綴爲'_crop.jpg'的後綴。不幸的是,我不熟悉bash腳本,所以不知道做這件事的確切方法。我用google搜索了一下,並且用'-exec'para嘗試了'find'命令,但沒有運氣。Bash:遞歸複製和重命名文件
Plz幫助我。謝謝。
我有很多文件的名字以'_100.jpg'結尾。它們在嵌套的文件夾/子文件夾中傳播。現在我想要一個詭計遞歸地複製和重命名所有這些後綴爲'_crop.jpg'的後綴。不幸的是,我不熟悉bash腳本,所以不知道做這件事的確切方法。我用google搜索了一下,並且用'-exec'para嘗試了'find'命令,但沒有運氣。Bash:遞歸複製和重命名文件
Plz幫助我。謝謝。
find bar -iname "*_100.jpg" -printf 'mv %p %p\n' \
| sed 's/_100\.jpg$/_crop\.jpg/' \
| while read l; do eval $l; done
非常好!這是我閱讀過這個主題的最簡單的解決方案!當我讀到它時,我只是想知道爲什麼我自己找不到它!也許B/C我不夠聰明:) – PierrOz 2010-09-24 15:14:02
,如果你有bash的4
shopt -s globstar
for file in **/*_100.jpg; do
echo mv "$file" "${file/_100.jpg/_crop.jpg}"
one
或使用發現
find . -type f -iname "*_100.jpg" | while read -r FILE
do
echo mv "${FILE}" "${FILE/_100.jpg/_crop.jpg}"
done
缺少引號,不適用於包含換行符的文件名。使用'find ... -exec'或'find ... -print0 |而不是xargs -0'。 – Philipp 2010-07-19 10:07:36
是的,缺少引號並修復。所以不需要使用xargs。接受的答案沒有報價。 – ghostdog74 2010-07-19 10:21:23
此使用您可能已經在你的系統上的Perl腳本。它有時也被稱爲prename
而不是rename
:
find /dir/to/start -type f -iname "*_100.jpg" -exec rename 's/_100/_crop' {} \;
可以使正則表達式更強大的,如果你需要保護某些文件名「_100」重複或你不想改了名字的部分。
相關問題:[更好的方式基於多個模式重命名文件](http://stackoverflow.com/a/25597051/2654678)。 – 2014-08-31 23:11:44