2013-10-19 14 views
9

Mam kilka plików .jpg z losowymi nazwami. Chcę skrypt bash, aby zmienić je tak:bash to batch zmień nazwy plików z dodawaniem numerów

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

pisałem tak:

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

Ale problem z powyższym bash jest to, że w pętli, n jest traktowany jako ciąg tak n + 1 dodaje kolejny "1" na końcu nowo przeniesionego pliku. Doceń swoje wskazówki.

Odpowiedz

15

Zastosowanie $((expression)) ekspansji arytmetycznych w powłoki bash

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

Czy chcesz '' lub basename $ (basename)? formy są bardziej uogólnione:

# 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 

lub

# 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 może także przed/po góra/dół wartości zmiennych używając składni oceny arytmetyczną jak ((var++)).

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