使用添加数字批量重命名文件

时间:2013-10-19 15:58:09

标签: bash batch-rename

我有一堆随机名称的.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'。 感谢您的提示。

3 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:4)

Bash也可以使用((var++))之类的算术评估语法预先/后递增/减少变量值。

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

答案 2 :(得分:3)

您想要'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