这是我目前拥有的:
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
如何让它发挥作用?
我相信您的
rename
会因为您的指示而放弃扩展。也就是说,您的 's/(\d+)\.txt/sprintf "%03d", $1/e'
将 \d+\.txt
替换为 sprintf "%03d", $1
的结果,其中不包含扩展名。
您真正需要做的就是用零填充版本替换文件名的整数部分。类似的东西
rename 's/(\d+)/sprintf "%03d", $1/e' *.txt
应该可以解决问题。