首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用id3和sed编写id3v2标记的脚本

用id3和sed编写id3v2标记的脚本
EN

Unix & Linux用户
提问于 2018-08-21 14:14:44
回答 1查看 4.6K关注 0票数 2

我正在尝试编写一个脚本来自动向mp3文件的id3标记添加跟踪和标题信息。

此时,我已经捕获了文件名中的信息并对其进行格式化以适应id3v2命令,但是在点击多个单词的标题时,我得到了错误Couldn't stat file ''。如果我只是回覆正在运行的id3v2命令,我会看到以下格式的命令:

代码语言:javascript
复制
id3v2 -t Title\ Of\ Track -T 1 1_-_Title_Of_Track.mp3

将文本复制/粘贴到终端中将正确执行标记,但当然缺乏脚本的预期自动化。因此,下面是打算自动化流程的脚本如下所示:

代码语言:javascript
复制
#!/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

对于为什么在手动输入时将标题视为单个参数,而不是在编写脚本时,有任何见解吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-08-22 03:25:18

基于Valentin和mueh的注释,我放弃了脚本中的解析sed,而是使用bash的字符串操作。虽然sed有利于解析多个数据并将其排序在一个命令中,但是使用结果的命令扩展会将输出分割成空格分隔,即使空格前面是反斜杠,也可以用引号包围。

因此,它没有尝试使用id3v2在一次传递中构造sed的所有参数,而是使用bash的字符串操作将其分解为分别解析轨道号和标题。最终结果:

代码语言:javascript
复制
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的字符串操作。

票数 9
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/463875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档