我正在尝试编写一个脚本来自动向mp3文件的id3标记添加跟踪和标题信息。
此时,我已经捕获了文件名中的信息并对其进行格式化以适应id3v2命令,但是在点击多个单词的标题时,我得到了错误Couldn't stat file ''。如果我只是回覆正在运行的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对于为什么在手动输入时将标题视为单个参数,而不是在编写脚本时,有任何见解吗?
发布于 2018-08-22 03:25:18
基于Valentin和mueh的注释,我放弃了脚本中的解析sed,而是使用bash的字符串操作。虽然sed有利于解析多个数据并将其排序在一个命令中,但是使用结果的命令扩展会将输出分割成空格分隔,即使空格前面是反斜杠,也可以用引号包围。
因此,它没有尝试使用id3v2在一次传递中构造sed的所有参数,而是使用bash的字符串操作将其分解为分别解析轨道号和标题。最终结果:
for track in *.mp3 ; do
track_num=${track%_-_*}
title=${track#*_} ; title=${title%.mp3} ; title=${title//_/ }
id3v2 -t "${title}" -T ${track_num} ${track}
done感谢mueh解释了我在这个问题中的方法不起作用的确切原因,以及Valentin B介绍了bash的字符串操作。
https://unix.stackexchange.com/questions/463875
复制相似问题