我正在尝试编写一个脚本来自动将曲目和标题信息添加到 mp3 文件的 id3 标签。
此时,我已经 sed 从文件名中获取信息并将其格式化以适合 id3v2 命令,但是在点击多字标题时,我得到了错误Couldn't stat file '<second word of title>'
。如果我只是回显正在运行的 id3v2 命令,我会看到以下格式的命令:
id3v2 -t Title\ Of\ Track -T 1 1_-_Title_Of_Track.mp3
将该文本复制/粘贴到终端中可以正确执行标记,但当然缺乏预期的脚本自动化。因此,旨在自动化该过程的脚本如下所示:
#!/bin/bash
for track in *.mp3 ; do
id3v2 $(echo ${track} | sed -e 's/^\([1-9][0-9]*\)_-_\(.*\).mp3/-t \2 -T \1/' -e 's/_/\\ /g') ${track}
done
关于为什么在手动键入时标题被视为单个参数但在编写脚本时不被视为单个参数的任何见解?
根据 Valentin B 和 mueh 的评论,我放弃
sed
了脚本中的解析,而是使用了 bash 的字符串操作。虽然sed
有利于解析多个数据并在单个命令中对其进行排序,但使用结果的命令扩展会将输出拆分为“单词”,这些单词将由空格分隔,即使空格前面有反斜杠或被引号包围.因此,与其尝试
id3v2
使用 单次传递来构造所有参数sed
,不如使用 bash 的字符串操作将其分解为分别解析出轨道号和标题。最终结果:感谢 mueh 准确解释了为什么我在问题中的方法不起作用,以及 Valentin B 介绍了 bash 的字符串操作。