Bash:递归复制和重命名文件

时间:2010-07-19 09:31:51

标签: shell

我有很多名字以'_100.jpg'结尾的文件。它们在嵌套的文件夹/子文件夹中传播。现在我想要一个技巧来递归复制并重命名所有这些都有'_crop.jpg'的后缀。不幸的是我不熟悉bash脚本,所以不知道做这件事的确切方法。我用Google搜索并尝试使用'-exec'para的'find'命令,但没有运气。

Plz帮助我。感谢。

3 个答案:

答案 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”的文件名或者您不希望更改的部分名称,可以使正则表达式更加健壮。