如何重命名为固定长度

Sig*_*gur 5 shell-script rename

我有一个名为作为文件0-n.jpgn从1到500,例如。

问题是一些使用 Windows 的人没有使用前导零,所以当我这样做时ls我得到

0-100.jpg
0-101.jpg
...
0-10.jpg
...
0-199.jpg
0-19.jpg
0-1.jpg
Run Code Online (Sandbox Code Playgroud)

所以我想重命名它们以插入前导零,以便结果ls可能是

0-001.jpg
0-002.jpg
...
0-100.jpg
...
0-499.jpg
0-500.jpg
Run Code Online (Sandbox Code Playgroud)

换句话说,我想要所有文件名长度相同的文件。

我尝试了这个解决方案,但我收到了一系列错误,例如

bash: printf: 0-99: invalid number
Run Code Online (Sandbox Code Playgroud)

ste*_*ver 9

如果您的系统具有基于 perl 的rename命令,您可以执行以下操作

rename -- 's/(\d+)-(\d+)/sprintf("%d-%03d",$1,$2)/e' *.jpg
Run Code Online (Sandbox Code Playgroud)

使用-v(verbose) 和-n(no-op) 选项对其进行测试:

$ rename -vn -- 's/(\d+)-(\d+)/sprintf("%d-%03d",$1,$2)/e' *.jpg
0-10.jpg renamed as 0-010.jpg
0-19.jpg renamed as 0-019.jpg
0-1.jpg renamed as 0-001.jpg
Run Code Online (Sandbox Code Playgroud)