【问题标题】:bash to batch rename files with adding numbersbash 通过添加数字批量重命名文件
【发布时间】:2013-10-28 09:08:09
【问题描述】:

我有一堆随机名称的 .jpg 文件。我想要一个 bash 脚本来重命名它们:

basename-0.jpg
basename-1.jpg
basename-2.jpg
.
.
.
.
basename-1000.jpg

这是我写的:

n = 0;
for file in *.jpg ; do mv  "${file}" basename"${n}".jpg; n+=1;  done

但上述 bash 的问题在于,在循环中,n 被视为字符串,因此 n+1 只是在新移动文件的末尾添加了另一个 '1'。 感谢您的提示。

【问题讨论】:

    标签: bash batch-rename


    【解决方案1】:

    在 bash shell 中使用 $((expression)) 进行算术扩展

    n=0;
    for file in *.jpg ; do mv  "${file}" basename"${n}".jpg; n=$((n+1));  done
    

    【讨论】:

      【解决方案2】:

      你想要'basename'还是$(basename)?更广义的形式是:

      # create basename-0.jpg, basename-1.jpg, ... basename-n.jpg
      e='jpg'; j=0; for f in *.$e; do mv "$f" basename-$((j++)).$e; done
      

      # preserve stem: <stemA>-0.jpg, <stemB>-1.jpg, ... <stem?>-n.jpg
      e='jpg'; j=0; for f in *.$e; do mv "$f" "${f%.*}"-$((j++)).$e; done
      

      【讨论】:

        【解决方案3】:

        Bash 还可以使用 ((var++)) 等算术评估语法预先/后递增/递减变量值。

        n=0;
        for file in *.jpg ; do mv  "${file}" basename"${n}".jpg; ((n++));  done
        

        【讨论】:

          猜你喜欢
          • 2012-09-02
          • 2013-06-15
          • 1970-01-01
          • 2015-12-12
          • 2010-10-10
          • 1970-01-01
          • 2017-01-01
          • 1970-01-01
          • 2021-04-02
          相关资源
          最近更新 更多