2016-04-02 61 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