根据文件在文件字母列表中的顺序创建变量

根据文件在文件字母列表中的顺序创建变量

我对 bash shell 脚本游戏还很陌生,但已经掌握得相当不错了。我现在正在为自动 id3 数据编辑或 mp3 文件编写脚本。我目前正在使用 id3v2 命令行程序。这些是来自我录制的警察扫描仪程序的 mp3 文件。我想知道是否有一种方法可以使变量与文件的编号相关......你知道我不知道如何表达这个。抱歉,这几天一直头疼。我可以这样解释。

因此,如果我在录音目录中,我可以轻松地按顺序列出它们,因为它们的录制时间是文件名的一部分。所以一般的 ls 命令会产生类似的结果

File_012030.mp3
File_012040.mp3
File_012045.mp3

我想使用一个变量将轨道号分配给每个文件的 id3 数据。我的第一个想法是以某种方式使用它在该目录中文件列表中的位置的数字。所以上面的例子就是这样。

File_012030.mp3 <- 01
File_012040.mp3 <- 02
File_012045.mp3 <- 03

这是可能的事吗?

答案1

只需使用 for 循环和计数器:

k=1; for file in *mp3; do
        id3v2 --track "$k" "$file"
        ((k++))
     done

这将迭代名称以 结尾的所有文件和目录mp3,并将每个文件和目录保存为$file.然后,$k变量每次迭代都会递增一次 ( ((k++))),因此$k文件的编号将按照您处理文件的顺序递增,您可以使用它--track "$k"来设置轨道编号。

答案2

它可能很简单(即使使用换行符的文件名也适用):

arr=(*)

pwd 中的所有文件名将存储在一个数组中,并通过其编号进行访问,例如:"${arr[2]}".

星号与 ls、tryecho *或 ls 非常相似,用于选择 mp3 的 tryecho *.mp3以查看其实际情况。

您可以使用以下命令查看所有文件的列表:

printf '%s\n' "${arr[@]}"

然后你可以使用循环来处理每个文件名:

for (( i=0 ; i<${#arr[@]} ; i++ )); do
    id3v2 --track "$((i+1))" "${arr[@]}"
done

相关内容