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'。感谢您的提示。

4

3 回答 3

14

用于$((expression))bash shell 中的算术扩展

n=0;
for file in *.jpg ; do mv  "${file}" basename"${n}".jpg; n=$((n+1));  done
于 2013-10-19T16:16:10.720 回答
4

Bash还可以使用算术评估语法(如((var++)).

n=0;
for file in *.jpg ; do mv  "${file}" basename"${n}".jpg; ((n++));  done
于 2013-10-19T18:55:53.847 回答
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
于 2013-10-19T18:40:46.837 回答