2016-11-23 37 views
-2

我有兩個由下劃線分隔的數字組成的文件名(來自圖像磁貼),例如:在文件名中加上兩位前導零

142_27.jpg 
7_39.jpg 
1_120.jpg 

我該如何(在Linux中)爲這兩個數字添加前導零?我要的是文件名作爲

142_027.jpg 
007_039.jpg 
001_120.jpg 
+0

'perldoc -f sprintf' – toolic

+0

您正在尋找重命名文件或更改文件中的文本? – Sundeep

+0

重命名文件。我發現了許多用於將零添加到文件名開頭的示例,但是在這裏我想在兩處(在開頭和下劃線之後)放置零。 – user1583209

回答

1

隨着perl基於rename命令

$ touch 142_27.jpg 7_39.jpg 1_120.jpg 
$ rename -n 's/\d+/sprintf "%03d", $&/ge' *.jpg 
rename(1_120.jpg, 001_120.jpg) 
rename(142_27.jpg, 142_027.jpg) 
rename(7_39.jpg, 007_039.jpg) 

-n選項預演,刪除它實際的重命名


如果perl基於rename命令不可用:

$ for f in *.jpg; do echo mv "$f" "$(echo "$f" | perl -pe 's/\d+/sprintf "%03d", $&/ge')"; done 
mv 1_120.jpg 001_120.jpg 
mv 142_27.jpg 142_027.jpg 
mv 7_39.jpg 007_039.jpg 

更改echo mv只是mv一次預演似乎還好

2

您可以使用printf使用單個awk命令格式的文件名與前導零:

for f in *.jpg; do 
    echo mv "$f" $(awk -F '[_.]' '{printf "%03d_%03d.%s", $1, $2, $3}' <<< "$f") 
done 

這將輸出:

mv 142_27.jpg 142_027.jpg 
mv 1_120.jpg 001_120.jpg 
mv 7_39.jpg 007_039.jpg 

一旦您對輸出滿意,請在mv命令前刪除echo

0

您可以使用SED一個小shell腳本做到這一點:

for i in *.jpg; 
do 
    new=`echo "$i" | sed -n -e '{ s/^\([0-9]\{0,3\}\)_\([0-9]\{0,3\}\).jpg/000\1_000\2.jpg/ }; 
    {s/\([0-9]*\)\([0-9]\{3\}\)_\([0-9]*\)\([0-9]\{3\}\).jpg/\2_\4.jpg/p };'`; 
    mv "$i" "$new"; 
done; 

我第一次在默認情況下,事後上述場所切斷作爲追加三個主要零許多數字必要時在上述位置開始brigning,以便只剩下3位數