GNU Find:为 -exec 命令获取一个 运行 计数器(用 运行 曲目编号标记 mp3)

GNU Find : Get a running counter for the -exec command ( to tag mp3s with running track number )

我想自动标记一组 MP3 成为自定义名称的 VA 专辑。 目前,我正在使用像这样的非常安全的命令:

find . -name "*.mp3" -exec eyeD3 -A "Indie 2015" -b "Various Artists" {} \;

现在,我想给文件添加一个 运行 曲目编号。最直接的方法是 find -exec 命令中的当前 match/line 数字 - 有这样的命令吗?

eyeD3 使用 -n NUM, --track NUM 设置曲目编号,所以我正在搜索

find . -name "*.mp3" -exec eyeD3 -A "Indie 2015" -b "Various Artists" -n **FIND_MATCH_NUMBER** {} \;

一个选项,使用 globstar(假设您在嵌套子目录中确实有文件,这就是您首先使用 find 的原因):

shopt -s globstar
n=1
for file in **/*.mp3; do
    eyeD3 -A "Indie 2015" -b "Various Artists" -n "$((n++))" "$file"
done

启用 globstar 后,**/*.mp3 全局扩展到当前目录以及子目录中以 .mp3 结尾的所有文件。 $((n++)) 评估计数器的当前值 $n 然后递增它。

不知道 find 是否有内部变量可以像 awk 中的 NR 一样告诉记录号。你可以在你的程序中有这样的东西

[[ -f file ]] && read i < file
[[ -z $i ]] && let i++
echo $i
let i++
echo $i > file

对于我们统计的每个文件,您都可以使用。文件可以是任何临时文件。