【问题标题】:Renaming files in a directory to specific prefix将目录中的文件重命名为特定前缀
【发布时间】:2014-04-15 18:17:27
【问题描述】:

我在一个目录中有 54 个文件,它们的名称从 *file00_Layer-53.png* 到 *file52_Layer-1.png*。我想将所有这些文件重命名为 file01.pngfile53.png

我知道我必须使用重命名命令,但我在使用它时遇到了困难。提前致谢

【问题讨论】:

    标签: shell unix scripting rename


    【解决方案1】:

    你可以使用重命名命令:

    c=0 rename 's/.*/sprintf("file%02d.png", ++$ENV{c})/e' *.png
    

    如果您想先进行测试,请使用 -n 标志:

    c=0 rename -n 's/.*/sprintf("file%02d.png", ++$ENV{c})/e' *.png
    

    它的工作方式是,对于每个参数,它执行 perl s/// 表达式,并执行从原始字符串到替换字符串的重命名。在替换字符串中,我使用sprintf 来格式化名称,其中我使用环境变量c 作为1 的计数器。

    或者你可以使用一个简单的循环计数器:

    j=1; for i in *.png; do mv "$i" file"$j".png; let j=j+1; done
    

    如果你想用 0 填充 2 位数字:

    j=1; for i in *.png; do mv "$i" file$(printf %02d $j).png; let j=j+1; done
    

    【讨论】:

    • 这似乎有效。但是文件之间有一个下划线。例如 file26_Layer-27.png 它重命名了所有文件,但仍然有所有文件的 Layer-* 编号部分。我想重命名完整的文件名。
    • @Randolphg 我不明白。你能举一个 FROM 和 TO 的确切例子吗?
    • 我在一个目录中有 54 个文件,它们的名称从 file00_Layer-53.pngfile52_Layer-1.png。我想将所有这些文件重命名为 file01.pngfile53.png
    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2022-11-16
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多