2013-06-19 47 views
6

到文件名命名文件我有很多的文件這樣的:與添加了一些在bash

13831_1.jpg 
13838_1.jpg 
138035_1.jpg 
138037_1.jpg 
138039_1.jpg 

我需要的5000000值添加到文件名的數字。 結果應該是以下幾點:

5013831_1.jpg 
5013838_1.jpg 
5138035_1.jpg 
5138037_1.jpg 
5138039_1.jpg 

有沒有辦法在bash做或Perl?

回答

7

做:rename -v。如果它將輸出:

Usage: rename [-v] [-n] [-f] perlexpr [filenames] 

此檢查是因爲至少有兩個不同的重命名工具,具有非常不同的功能。我遇到的解決方案需要重命名處理perlexpr。

然後,您可以:

rename 's/^(\d+)/5000000+$1/e' *.jpg 
+0

我想試試這個(因爲它聽起來輝煌),但我好像沒有做在cygwin中有'rename'。你知道我是否可以得到它? –

+2

@SvendHansen,它實際上是一個[perl腳本](http://stackoverflow.org/wiki/Rename.pl)。 – doubleDown

+0

我在互聯網上搜索了一下,它似乎不適用於cygwin。安裝'util-linux'軟件包會給你一個'rename'命令,但它更像'mv',似乎不支持正則表達式(或者如果它不是這種格式)。有一些第三方/家庭寫的腳本提供功能,但(像這樣的:http://nylinuxhelp.com/blogs/command-line/cygwin-rename-command-help) –

4

一種方式做到這一點只用bash

for file in *.jpg; do 
    number=${file%_*} 
    therest=${file#$number} 
    mv "$file" "$((number+5000000))$therest" 
done 

注:

-2
$filename  = "13831_1.jpg"; 
$org   = explode("_".$filename); 
$addnumber  = 5000000+$org[0]; 
$string  = implode("_",$addnumber); 
+0

它在什麼語言?這絕對不是bash。 – 2013-06-19 10:12:55

+0

看起來像[php](http://php.net/manual/en/function.implode.php) – doubleDown

相關問題