到文件名命名文件我有很多的文件這樣的:與添加了一些在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?
到文件名命名文件我有很多的文件這樣的:與添加了一些在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?
做:rename -v
。如果它將輸出:
Usage: rename [-v] [-n] [-f] perlexpr [filenames]
此檢查是因爲至少有兩個不同的重命名工具,具有非常不同的功能。我遇到的解決方案需要重命名處理perlexpr。
然後,您可以:
rename 's/^(\d+)/5000000+$1/e' *.jpg
一種方式做到這一點只用bash
for file in *.jpg; do
number=${file%_*}
therest=${file#$number}
mv "$file" "$((number+5000000))$therest"
done
注:
*.jpg
將擴大到.jpg
文件在當前目錄列表(ref:Filename expansion)。${file%_*}
刪除文件名中的_
後的所有內容並將其返回。 (ref:Shell parameter expansion)${file#$number}
從文件名的開頭刪除變量number
的內容並返回它。 (參考:Shell parameter expansion)$((number+5000000))
內部評估算術表達式並返回結果(參考:Arithmetic expansion)$filename = "13831_1.jpg";
$org = explode("_".$filename);
$addnumber = 5000000+$org[0];
$string = implode("_",$addnumber);
它在什麼語言?這絕對不是bash。 – 2013-06-19 10:12:55
看起來像[php](http://php.net/manual/en/function.implode.php) – doubleDown
我想試試這個(因爲它聽起來輝煌),但我好像沒有做在cygwin中有'rename'。你知道我是否可以得到它? –
@SvendHansen,它實際上是一個[perl腳本](http://stackoverflow.org/wiki/Rename.pl)。 – doubleDown
我在互聯網上搜索了一下,它似乎不適用於cygwin。安裝'util-linux'軟件包會給你一個'rename'命令,但它更像'mv',似乎不支持正則表達式(或者如果它不是這種格式)。有一些第三方/家庭寫的腳本提供功能,但(像這樣的:http://nylinuxhelp.com/blogs/command-line/cygwin-rename-command-help) –