2016-04-02 91 views
0

在我的系統文件在以下格式重複訂購shell腳本文件

image0.jpg 
image1.jpg 
image2.jpg 
image3.jpg 
    . 
    . 

    . 
    . 
    . 
image10.jpg 
image11.jpg 

我可以用下面這樣的腳本

for i in *.jpg; do 
    new=$(printf "xome%04d.jpg" "$a") #04 pad to length of 4 
     mv -- "$i" "$new" 
     let a=a+1 
done 

命令文件,但什麼發生的是它得到的文件在此爲了像image0.jpg,image10.jpg,image1.jpg,image11.jpg,image2.jpg..............

如何使用shell腳本

+0

如果這些文件已經命名爲'imageN.jpg',爲什麼不從文件名中提取數字,只需用0填充即可,而不是使用計數器? –

+0

@Mark提示「mv - 」$ i「」xome $ {i%image}「' –

回答

0

嘗試噸至獲取序列他:

for i in {1..11}; do 
    printf -v newfile "xome%04d.jpg" "$i" 
    [ -f "image${i}" ] && mv "image${i}.jpg" "$newfile" 
done 

-v選項存儲printf結果變量newfile

[ -f "image${i}" ]測試在嘗試重命名之前是否存在文件。

+1

您應該引用''$ newfile」'。 – tripleee

+0

@tripleee也許作爲一個好習慣,但在這種情況下,'$ newfile'由非空格字符串組成。 – SLePort

+0

在這個特殊情況下,是的,但增加兩個字符來涵蓋更普遍的問題似乎是一個適中的價格。 – tripleee