我有兩個由下劃線分隔的數字組成的文件名(來自圖像磁貼),例如:在文件名中加上兩位前導零
142_27.jpg
7_39.jpg
1_120.jpg
我該如何(在Linux中)爲這兩個數字添加前導零?我要的是文件名作爲
142_027.jpg
007_039.jpg
001_120.jpg
我有兩個由下劃線分隔的數字組成的文件名(來自圖像磁貼),例如:在文件名中加上兩位前導零
142_27.jpg
7_39.jpg
1_120.jpg
我該如何(在Linux中)爲這兩個數字添加前導零?我要的是文件名作爲
142_027.jpg
007_039.jpg
001_120.jpg
隨着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
一次預演似乎還好
您可以使用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
。
您可以使用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位數
'perldoc -f sprintf' – toolic
您正在尋找重命名文件或更改文件中的文本? – Sundeep
重命名文件。我發現了許多用於將零添加到文件名開頭的示例,但是在這裏我想在兩處(在開頭和下劃線之後)放置零。 – user1583209