【发布时间】:2010-07-19 09:31:51
【问题描述】:
我有很多名称以“_100.jpg”结尾的文件。它们分布在嵌套文件夹/子文件夹中。现在我想要一个技巧来递归复制并重命名它们,使其具有“_crop.jpg”的后缀。不幸的是,我不熟悉 bash 脚本,所以不知道执行此操作的确切方法。我用谷歌搜索并尝试了带有'-exec'参数的'find'命令,但没有运气。
请帮助我。谢谢。
【问题讨论】:
标签: shell
我有很多名称以“_100.jpg”结尾的文件。它们分布在嵌套文件夹/子文件夹中。现在我想要一个技巧来递归复制并重命名它们,使其具有“_crop.jpg”的后缀。不幸的是,我不熟悉 bash 脚本,所以不知道执行此操作的确切方法。我用谷歌搜索并尝试了带有'-exec'参数的'find'命令,但没有运气。
请帮助我。谢谢。
【问题讨论】:
标签: shell
find bar -iname "*_100.jpg" -printf 'mv %p %p\n' \
| sed 's/_100\.jpg$/_crop\.jpg/' \
| while read l; do eval $l; done
【讨论】:
如果你有 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。
这使用了您系统上可能已经存在的 Perl 脚本。它有时被称为prename 而不是rename:
find /dir/to/start -type f -iname "*_100.jpg" -exec rename 's/_100/_crop' {} \;
如果您需要保护“_100”重复的文件名或您不想更改的部分名称的文件名,您可以使正则表达式更加健壮。
【讨论】: