如何使用fishshell为文件添加数字

时间:2016-03-29 10:04:20

标签: numbers fish

我有一个非常简单的MP3播放器,它播放音频文件的顺序是基于文件名,规则是文件名的开头必须有一个3号码,例如:

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

我想写一个鱼壳sortmp3来为目录的文件添加数字。说目录myfiles包含文件:

aaa.mp3
bbb.mp3
ccc.mp3`

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

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

但我的问题是:

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

3 个答案:

答案 0 :(得分:3)

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

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”。

答案 1 :(得分:2)

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

这只会照顾第一部分,它不会填充三个字符。

要做到这一点,有各种各样的选择:

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

00(seq 0 99)部分将生成来自" 1"的数字。至" 99"两个零前置 - 即。来自" 001"至" 0099"。管道的后面部分再次删除了多余的零。

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

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

答案 2 :(得分:2)

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

set idx 12
printf '%03d' $idx