Linux 重命名文件夹中名称为 ab1.jpg、ab2.jpg、ab10.jpg 等的文件

Linux Renaming files in a folder where the names is ab1.jpg, ab2.jpg, ab10.jpg etc

文件的顺序由一个数字决定,该数字可以嵌​​入文件名中,但有时在名称的开头,例如 file1.txt file2.txt file3.txt file10.txt file11.txt ETC.. 或者 1.txt 2.txt 10.txt 等..

重命名的结果应该是... 文件 01.txt 文件 02.txt file03.txt file10.txt 等...

重要的是 file1.txt 将成为 file01.txt 而不是 file10.txt 成为 file01.txt.

我认为文件名必须在重命名前格式化。我不知道如何在命令行上执行此操作,也许它必须通过脚本来完成,但我希望不会。

该命令应给出最终名称中应包含的位数。如果可以使用格式化字符串,我们也可以给出数字所在的位置。

使用 perl rename 实用程序:

rename -n 's/\d+/sprintf("%02d", $&)/e' *.txt

结果将是:

$ ls
file10.txt  file1.txt  file2.txt  file3.txt

$ rename -n 's/\d+/sprintf("%02d", $&)/e' *.txt
rename(file1.txt, file01.txt)
rename(file2.txt, file02.txt)
rename(file3.txt, file03.txt)

如果看起来不错,请删除 -n dry-运行 标志。

请注意 sprintf 的格式字符串决定了零填充的 "width",因此如果您处理的文件名达到三位数,您需要更改它到 "%03d",等等..

$ ls
file100.txt  file10.txt  file1.txt  file2.txt  file3.txt

$ rename -n 's/\d+/sprintf("%03d", $&)/e' *.txt
rename(file10.txt, file010.txt)
rename(file1.txt, file001.txt)
rename(file2.txt, file002.txt)
rename(file3.txt, file003.txt)