如何使用fishshell给文件加号

How to use fishshell to add numbers to files

我有一个非常简单的mp3播放器,它播放音频文件的顺序是根据文件名来的,规则是文件名开头必须有一个3位数字,例如:

001file.mp3
002file.mp3
003file.mp3

我想写一条鱼shell sortmp3给一个目录的文件加号。假设目录 myfiles 包含文件:

aaa.mp3
bbb.mp3
ccc.mp3`

当我运行sortmp3 myfiles时,文件名将更改为:

001aaa.mp3
002bbb.mp3
003ccc.mp3

但我的问题是:

  1. 如何生成一些序号?
  2. 如何确保每个数字的大小正好是 3?

您可以使用 seq 工具 - 外部程序生成序列号。

这只会处理第一部分,不会填充到三个字符。

为此,有多种选择:

printf '%s\n' 00(seq 0 99) | rev | cut -c 1-3 | rev
printf '%s\n' 00(seq 0 99) | sed 's/^.*\(...\)$//'

00(seq 0 99) 部分将生成从“1”到“99”的数字,并在前面加上两个零 - 即。从“001”到“0099”。管道的后面部分再次删除多余的零。

或者在下一个 fish 版本中,您可以使用新的 string 工具:

string sub -s -3 -- 00(seq 0 99)

我会写这个,它不假设目录中有多少文件:

function sortmp3
    set -l files *
    set -l i
    for i in (seq (count $files))
        echo mv $files[$i] (printf "%03d%s" $i $files[$i])
    end
end

如果您喜欢它的工作方式,请删除 "echo"。

根据您的具体情况,您应该使用 "seq" 命令生成序列号或使用 "math" 命令递增计数器。要使用可预测数量的前导零格式化数字,请使用 "printf" 命令:

set idx 12
printf '%03d' $idx