我有很多名字以'_100.jpg'结尾的文件。它们在嵌套的文件夹/子文件夹中传播。现在我想要一个技巧来递归复制并重命名所有这些都有'_crop.jpg'的后缀。不幸的是我不熟悉bash脚本,所以不知道做这件事的确切方法。我用Google搜索并尝试使用'-exec'para的'find'命令,但没有运气。
Plz帮助我。感谢。
答案 0 :(得分:6)
find bar -iname "*_100.jpg" -printf 'mv %p %p\n' \
| sed 's/_100\.jpg$/_crop\.jpg/' \
| while read l; do eval $l; done
答案 1 :(得分:2)
如果你有bash 4
shopt -s globstar
for file in **/*_100.jpg; do
echo mv "$file" "${file/_100.jpg/_crop.jpg}"
one
或使用find
find . -type f -iname "*_100.jpg" | while read -r FILE
do
echo mv "${FILE}" "${FILE/_100.jpg/_crop.jpg}"
done
答案 2 :(得分:1)
这使用您可能已经在系统上的Perl脚本。它有时被称为prename
而不是rename
:
find /dir/to/start -type f -iname "*_100.jpg" -exec rename 's/_100/_crop' {} \;
如果您需要保护重复“_100”的文件名或者您不希望更改的部分名称,可以使正则表达式更加健壮。