如何使用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
但我的问题是:
- 如何生成一些序号?
- 如何确保每个数字的大小正好是 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
我有一个非常简单的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
但我的问题是:
- 如何生成一些序号?
- 如何确保每个数字的大小正好是 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