2013-05-13 13 views
1

我有一組名爲img1.png,img2.png,... img10.png,等等的文件。我想實現的是重命名這些文件,使起始索引增加30,使文件變成img31.png,img32.png,..... img40.png,....等等。這可能使用「重命名」命令?或者是一個腳本需要?在這兩種情況下,我該怎麼做?腳本或命令來更改一組順序編號的文件的起始索引號

相關 - 爲了這個工作,我必須首先將文件重命名爲img001.png,img002.png,... img010.png等等?如果需要,這是如何完成的?

回答

-1
LOCATION=/my/image/directory #change this to your location 
for file in $(ls -1 ${LOCATION}) 
do 
    ind=$(echo ${file}|cut -c 4-|cut -d"." -f1) 
    ((newind=${ind}+30)) 
    mv ${LOCATION}/${file} ${LOCATION}/img${newind}.png 
done 

我相信有更優雅的用awk/sed的/ perl的等喜歡一行這樣的方式,但是這顯示了它背後的邏輯。

希望它可以幫助

+1

1)[不要迭代$(ls)](http://mywiki.wooledge.org/P arsingLs) - '用於$ LOCATION/*'中的文件。 2)你也需要在每個地方引用''$ file''。這兩個都是爲了保護你免受姓名空白的文件。 – 2013-05-13 20:47:32

+0

我不同意。你的陳述正在做出假設。 Mine是* ANY * Unix的通用類型。 – MelBurslan 2013-05-22 08:27:54

+0

我在我的最後一條評論中沒有做出任何假設 – 2013-05-22 14:39:35

2

在每個文件名添加30到數字

rename 's/(\d+)/$1+30/e' *png 

更名爲3個位數

rename 's/(\d+)/sprintf("%03d",$1)/e' *png 

請參閱perldoc perlre http://perldoc.perl.org/perlre.html的是如何工作的細節,重命名是一個Perl程序

+0

對於重命名Git補丁文件(將它們附加到25的現有列表),我使用了'rename's /(\ d +) -/sprintf(「%04d」,$ 1 + 25)/e'* .patch' – chronospoon 2015-04-10 16:21:12