代码之家  ›  专栏  ›  技术社区  ›  Shawn

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

  •  3
  • Shawn  · 技术社区  · 15 年前

    我有很多文件的名字以“\u100.jpg”结尾。它们分布在嵌套的文件夹/子文件夹中。现在我需要一个技巧,递归地复制并重命名所有的文件,使其后缀为'\u crop.jpg'。不幸的是,我不熟悉bash脚本,所以不知道具体的方法来做这件事。我在google上搜索并尝试了带有“-exec”段落的“find”命令,但没有成功。

    请帮帮我。谢谢。

    3 回复  |  直到 15 年前
        1
  •  6
  •   akira    15 年前
      find bar -iname "*_100.jpg" -printf 'mv %p %p\n' \
        | sed 's/_100\.jpg$/_crop\.jpg/' \
        | while read l; do eval $l; done
    
        2
  •  2
  •   ghostdog74    15 年前

    如果你有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
    
        3
  •  1
  •   Dennis Williamson    15 年前

    这将使用系统中可能已经存在的Perl脚本。有时叫做 prename rename :

    find /dir/to/start -type f -iname "*_100.jpg" -exec rename 's/_100/_crop' {} \;