【问题标题】:Rename matching files based on a serial number根据序列号重命名匹配文件
【发布时间】:2019-04-14 16:23:02
【问题描述】:

假设我有一堆文件是 mac 截图:

Screen Shot 2018-11-09 at 12.37.37 PM.png
Screen Shot 2018-11-10 at 4.53.02 PM.png
Screen Shot 2018-11-10 at 9.19.19 PM.png

我想用 mv 将它们标记为:

Screen_0.png
Screen_1.png
Screen_2.png

我想出的部分命令:

find . -name "Screen*" -exec sh -c 'mv "$1" "Screen_$2"' _ {} ??? \;

如何实现该命令,以便它可以按数字标记图像?还是我必须求助于更复杂的文件。

【问题讨论】:

    标签: bash find rename


    【解决方案1】:

    我认为不可能以您想要的方式传递序列号xargs。改用简单的循环:

    #!/bin/bash
    for file in Screen*.png; do
      [[ -f $file ]] || continue # skip if not a regular file
      mv "$file" "Screen_$((count++)).png"
    done
    

    【讨论】:

    • $((count++)) 是否也启动变量count?看起来像。我从来不知道这是可能的。
    • 是的,确实如此。请注意后增量 - 初始值将为零。如果希望初始值为 1,请使用$((++count))
    【解决方案2】:

    您可以只使用rename,也就是 Perl 重命名:

    rename --dry-run 's/.*/Screen_$N.png/' Screenshot*png
    

    样本输出

    'Screenshot 2018-11-12 at 11.54.32.png' would be renamed to 'Screen_1.png'
    'Screenshot 2018-11-12 at 11.54.38.png' would be renamed to 'Screen_2.png'
    'Screenshot 2018-11-12 at 11.54.42.png' would be renamed to 'Screen_3.png'
    

    如果您喜欢输出的外观,请在不使用 --dry-run 的情况下再次运行。


    如果您使用的是 macOS,则可以使用 homebrew 安装 Perl rename

    brew install rename
    

    【讨论】:

      【解决方案3】:

      如果使用数组,则不需要算术运算,只需使用每个元素的索引即可:

      #!/bin/bash
      files=('Screen Shot'*.png)
      for i in "${!files[@]}" ; do
          mv "${files[i]}" Screen_$i.png
      done
      

      【讨论】:

      • 谢谢,我能够将您的代码压缩成一行:files=(Screen*); for i in ${!files[@]}; do mv ${files[i]} "Screen_$i.png"; done 在终端中工作,非常感谢!
      【解决方案4】:

      使用 Perl 单行也可以轻松完成。

      > ls -1 Screen*
      Screen Shot 2018-11-09 at 12.37.37 PM.png
      Screen Shot 2018-11-10 at 4.53.02 PM.png
      Screen Shot 2018-11-10 at 9.19.19 PM.png
      > perl -ne ' BEGIN { for(glob("Screen*")) {  rename "$_", "Screen_".$x++.".png" } ; exit }'
      > ls -1 Screen*
      Screen_0.png
      Screen_1.png
      Screen_2.png
      >
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-23
        • 2021-10-23
        • 2019-06-11
        • 2013-07-13
        • 2019-11-29
        • 2021-04-23
        • 2013-10-25
        • 1970-01-01
        相关资源
        最近更新 更多