我遇到了一个问题,我有一个文件名目录:
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”。
有人能指出我正确的方向吗?任何帮助将不胜感激。
谢谢。
答案 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.