【问题标题】:Add incremental zero padding to filenames [duplicate]向文件名添加增量零填充[重复]
【发布时间】:2018-10-01 15:36:49
【问题描述】:

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

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”。

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

谢谢。

【问题讨论】:

  • 第二个代码块中有大引号。
  • 不要使用大写的变量名,这通常是为环境变量保留的
  • 修复引用,你的第二个循环工作。

标签: bash rename file-rename batch-rename


【解决方案1】:

使用带有 perl 表达式的 rename 实用程序:

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

使用 -n 标志对测试很有用,直到找到确切的表达式:

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

【讨论】:

    【解决方案2】:

    感谢Barmar 在 cmets 中的建议 - 这是一个带引号的问题。

    我将引号更改为常规的平行引号,它可以工作。

    【讨论】:

      猜你喜欢
      • 2020-12-15
      • 2015-11-18
      • 2013-12-13
      • 2011-03-08
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多