如何向已有数字的文件名添加零填充?

如何向已有数字的文件名添加零填充?

我使用 Sound Juicer 翻录了一本语言学习书籍的音频 CD,以便可以在 Android 上收听。但是,Sound Juicer 似乎只能选择对文件进行编号而不使用前导零。如下所示:

track_1.mp3
track_10.mp3
track_11.mp3

这导致我的音乐播放器排序混乱。因此,我想在名称中添加一些零,以便正确排序,如下所示:

track_01.mp3
track_02.mp3
track_03.mp3

我该如何实现这一点?我尝试使用 GPRename,但尽管它可以添加数字,但似乎没有任何添加前导零的选项。

有没有更好的程序或者我可以在命令行上做的事情?

答案1

我假设你只需要重命名文件 1-9,因为这些文件需要填充。有多种方法可以做到这一点。

您可以执行以下命令:

for n in $(seq 9); do mv track_$n.mp3 track_0$n.mp3; done;

这会将 tracks track_1.mp3-重命名track_9.mp3track_01.mp3- track_09.mp3


分解一下,它看起来是这样的:

for n in $(seq 9)
do
    mv track_$n.mp3 track_0$n.mp3
done
  • for n in $(seq 9):对于命令输出中的每个数字seq 9,该命令仅列出数字 1 至 9 do,,
  • mv track_$n.mp3 track_0$n.mp3n:这是重命名文件的实际命令。它替换迭代所有数字的值。因此它会执行mv track_1.mp3 track_01.mp3mv track_2.mp3 track_02.mp3,直到最后一个数字 9。

答案2

以下脚本将重命名给定目录中的文件。无论文件数量有多少,它都会计算所需的前导零的数量(如果超过 100 个,则需要更多零),并自动重命名文件。

使用它

将下面的脚本复制到一个空文件中,在 headsection 中,设置源目录、前缀(本例中为“track-”)和要重命名的文件的文件扩展名。将其保存为 rename.py 并通过以下命令运行它:

python3 /path/to/script.py

剧本:

#!/usr/bin/env python3

import shutil
import os

sourcedir = "/path/to/sourcedir"
prefix = "track_"
extension = "mp3"

files = [(f, f[f.rfind("."):], f[:f.rfind(".")].replace(prefix, "")) for f in os.listdir(sourcedir) if f.endswith(extension)]
maxlen = len(max([f[2] for f in files], key = len))

for item in files:
    zeros = maxlen - len(item[2])
    shutil.move(sourcedir+"/"+item[0], sourcedir+"/"+prefix+str(zeros*"0"+item[2])+item[1])

答案3

当然有很多方法可以做到这一点。例如,你可以:

  • 分离零件
  • 填充有数字的部分
  • 将各个部分重新连接成新名称

将其放入循环中:

#!/bin/bash

item="track_1.mp3"

part1=`echo $item | awk -F_ '{print $1}'`
part2=`echo $item | awk -F_ '{print $2}'`
part2a=`echo $part2 | awk -F. '{print $1}'`
part2b=`echo $part2 | awk -F. '{print $2}'`
number=`printf "%02d" $part2a`
seperator="_"
newname="$part1$seperator$number.$part2b"
echo $newname

循环:

#!/bin/bash

for item in track_1.mp3 track_10.mp3 track_11.mp3
do
    part1=`echo $item | awk -F_ '{print $1}'`
    part2=`echo $item | awk -F_ '{print $2}'`
    part2a=`echo $part2 | awk -F. '{print $1}'`
    part2b=`echo $part2 | awk -F. '{print $2}'`
    number=`printf "%02d" $part2a`
    seperator="_"
    newname="$part1$seperator$number.$part2b"
    echo "Renaming $item -> $newname"
    mv $item $newname
done
enter code here

答案4

编写一个脚本,其工作方式如下命令

将该文件放在您跟踪文件所在的目录中。

  • 像这样

    touch change
    chmod +x change
    vim change
    
  • 在其中写入

    #!/bin/bash
    n=0
    for m in {00 .. 99}
    do
       mv track_$n.mp3 track_$m
       n=`expr $n + 1``
    done
    

相关内容