使用 Perl 的“重命名”用前导零填充文件名

问题描述 投票:0回答:1

这是我目前拥有的:

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

这会添加前导零,但不幸的是会删除扩展名:

rename(./1.txt, ./001)
rename(./2.txt, ./002)
rename(./3.txt, ./003)

我尝试了以下方法,但这没有帮助:

  • rename -n 's/(\d+)(\.txt)/sprintf "%03d", $1/e$2' ./*.txt
  • rename -n 's/(\d+)(\.txt)/(sprintf "%03d", $1/e)$2' ./*.txt

如何让它发挥作用?

perl batch-rename
1个回答
0
投票

我相信您的

rename
会因为您的指示而放弃扩展。也就是说,您的
's/(\d+)\.txt/sprintf "%03d", $1/e'
\d+\.txt
替换为
sprintf "%03d", $1
的结果,其中不包含扩展名。

您真正需要做的就是用零填充版本替换文件名的整数部分。类似的东西

rename 's/(\d+)/sprintf "%03d", $1/e' *.txt

应该可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.