我有两个由下划线分隔的数字组成的文件名(来自图像磁贴),例如:在文件名中加上两位前导零
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