我有一个非常简单的MP3播放器,它播放音频文件的顺序是基于文件名,规则是文件名的开头必须有一个3号码,例如:
001file.mp3
002file.mp3
003file.mp3
我想写一个鱼壳sortmp3
来为目录的文件添加数字。说目录myfiles
包含文件:
aaa.mp3
bbb.mp3
ccc.mp3`
当我运行sortmp3 myfiles
时,文件名将更改为:
001aaa.mp3
002bbb.mp3
003ccc.mp3
但我的问题是:
答案 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