2013-10-19 8 views
9

Ich habe eine Reihe von JPG-Dateien mit zufälligen Namen. Ich möchte ein Bash-Skript, sie wie folgt benennen:Bash zu Batch umbenennen Dateien mit Zusatznummern

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

ich dies schrieb:

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

Aber das Problem mit dem obigen bash ist, dass in der Schleife, n als String betrachtet wird, so n + 1 fügt einfach eine weitere '1' am Ende der neu verschobenen Datei hinzu. Schätzen Sie Ihre Hinweise.

Antwort

15

Verwenden $((expression)) für arithmetische Expansion in Bash-Shell

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

Haben Sie 'Basisnamen' wollen oder $ (basename)? Verallgemeinerte Formen sind:

# 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 

oder

# 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 
5

Bash können auch arithmetische Auswertung Syntax wie ((var++)) mit Pre/Post-Inkrement/Dekrement Variablenwerte.

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