将值减去文件名后缀和批量重命名

Posted

技术标签:

【中文标题】将值减去文件名后缀和批量重命名【英文标题】:Subtracting value to file name suffix and bulk rename 【发布时间】:2015-09-23 16:12:25 【问题描述】:

愚蠢的问题,是否有 UNIX 命令可以从格式重命名文件:

"particles_00090.png" "particles_00091.png" .... "particles_00131.png"

“粒子-00000.png” “粒子-00001.png” .... “粒子-00041.png”

基本上,我想将 90 值减去文件后缀,同时保留数值的数量(在上面的例子中,我们有 5 个零)并将下划线转换为破折号。 p>

【问题讨论】:

您想知道简单的重命名、将 9 更改为 0,还是从末尾的数字中减去 90? 最后的数字减90.. 我不知道有什么超级简单的命令可以做到这一点,但你总是可以写一个脚本来做到这一点。 我对“减”值步骤有点卡住了。有什么想法吗? 由于脚本将所有内容都视为字符串,并在需要时转换为整数,您可以使用cut 将文件名拆分为'_',然后将后半部分拆分为'.'要获得数字,然后只需减去 90。要获得相同数量的零,可能需要循环排序以添加零,然后只需添加新数字。然后你想使用cut 来获取“粒子”部分和“.png”部分,并将所有内容连接在一起......我认为 【参考方案1】:

这里有一些不是很好和可扩展的东西,但它在 bash 中有效(它分两步完成:需要替换最后 2 位数字的文件和需要替换最后 3 位数字的文件):

for f in 90..99; do mv particles_000$f particles_000$((f-90)) ; done
for f in 100..131; do mv particles_00$f particles_00$((f-90)) ; done

【讨论】:

巧妙利用范围扩展。 谢谢,但到目前为止还没有您的解决方案那么详细。【参考方案2】:

不,但您可以编写算法脚本:

for fn_orig in particles_*
do
    # split the file name up into 3 parts
    extension="$fn_orig##*."
    filename="$fn_orig%.*"
    number="$filename#particles_"

    # do the desired math
    subtract=$(expr $number + 0 - 90 )

    # reassemble to the desired format
    fn_new=$(printf "particles-%05d.%s" $subtract $extension)

    # output the command, in case tweaking is wanted
    # just remove the echo to actually do it
    echo mv "$fn_orig" "$fn_new"
done

示例运行:

$ ls
particles_00090.png  particles_00091.png  particles_00131.png  command.sh

$ ./command.sh
mv particles_00090.png particles-00000.png
mv particles_00091.png particles-00001.png
mv particles_00131.png particles-00041.png

【讨论】:

以上是关于将值减去文件名后缀和批量重命名的主要内容,如果未能解决你的问题,请参考以下文章

python批量重命名指定目录下所有文件的后缀名

linux下怎么批量重命名这些文件

如何以照片的拍摄时间批量重命名文件

php 批量修改文件格式或重命名

批量重命名文件

如何批量修改文件的后缀名001到100?