Use $((expression))
for arithmetic expansion in bash shell
n=0;
for file in *.jpg ; do mv "${file}" basename"${n}".jpg; n=$((n+1)); done
Frage
I have a bunch of .jpg files with random names. I want a bash script to rename them like this:
basename-0.jpg
basename-1.jpg
basename-2.jpg
.
.
.
.
basename-1000.jpg
I wrote this:
n = 0;
for file in *.jpg ; do mv "${file}" basename"${n}".jpg; n+=1; done
But the problem with the above bash is that in the loop, n is considered as string so n+1 just adds another '1' to the end of newly moved file. Appreciate your hints.
Lösung
Use $((expression))
for arithmetic expansion in bash shell
n=0;
for file in *.jpg ; do mv "${file}" basename"${n}".jpg; n=$((n+1)); done
Andere Tipps
Bash
can also pre/post increment/decrement variable values using arithmetic evaluation syntax like ((var++))
.
n=0;
for file in *.jpg ; do mv "${file}" basename"${n}".jpg; ((n++)); done
Did you want 'basename' or $(basename)? More generalized forms are:
# 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
or
# 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