将增量零填充添加到文件名

时间:2018-04-20 21:10:53

标签: bash rename file-rename batch-rename

我遇到了一个问题,我有一个文件名目录:

something1.exr
something2.exr
something3.exr

我需要它们命名为

projectname.0000001.exr
projectname.0000002.exr
projectname.0000003.exr

我想出了这个:

NAME=image_test_GAM_4778x1806 c=1; for i in *.exr; do mv "$i" `printf $NAME."$c".exr`; let c=c+1; done

,它可以重命名文件,如:

image_test_GAM_4778x1806.1.exr
image_test_GAM_4778x1806.2.exr
image_test_GAM_4778x1806.3.exr

但是,我需要增加的数字才能有7位填充零,所以我发现我可以使用"%07d"执行此操作,因此我假设此代码应该有效:

NAME=image_test_GAM_4778x1806 c=1; 
for i in *.exr; do 
    mv $i $(printf “%s.%07d.exr” “$NAME” “$c”); 
    let c=c+1; 
done

但它不起作用并抱怨我正在使用mv错误。我知道有什么不对,但从逻辑上说它应该有效,我试图将$ NAME和$ c分别传递给“%s。%07d.exr”。

有人能指出我正确的方向吗?任何帮助将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:0)

Using rename utility with a perl expression:

rename -n "s/something(\d+)(.*)/'projectname.' . sprintf('%07d', \$1) . \$2/ge" *.exr

Using -n flag is useful to test until you found the exact expression:

something10.exr renamed as projectname.0000010.exr
something1.exr renamed as projectname.0000001.exr
something2.exr renamed as projectname.0000002.exr
something3.exr renamed as projectname.0000003.exr

答案 1 :(得分:-1)

Thanks to Barmar's suggestion in the comments - this was an issue with curly quotes.

I changed the quotes to regular parallel quotes and it works.