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

时间:2015-07-06 13:26:22

标签: file unix rename

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

  

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

  

"颗粒-00000.png" "颗粒-00001.png" ...."粒子-00041.png"

基本上,我希望将值 90 减去文件后缀,同时保持数值的数量(在上面的情况下我们有5个零)并将下划线转换为破折号。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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