2013-10-19 56 views
9

我有一堆帶有隨機名稱的.jpg文件。我想一個bash腳本給他們這樣的重命名: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 + 1只是在新移動文件的末尾添加了另一個'1'。 欣賞你的提示。

回答

15

使用$((expression))在bash的算術擴展外殼

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

你想 '基本名' 或$(基名)?更廣義的形式是:

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

Bash也可以使用算術評價語法等((var++))預/後遞增/遞減變量值。

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