使用Bash进行批量重命名文件并添加编号

9

我有一堆随机命名的.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个回答

14

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

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

你如何调整这个答案,以适应你事先不知道文件扩展名的情况?比如说,我有一个混合扩展名的目录(我事先不知道),我想用递增的模式盲目地为它们命名,但保留它们现有的扩展类型。 - Raleigh L.

4

Bash可以使用算术表达式语法进行变量的前/后自增/自减操作,例如((var++))

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接