我使用命令行实用程序youtube-dl从 YouTube 下载视频并使用avconv. 我在 Ubuntu 14.04 下做这件事并且对它非常满意。
该实用程序下载文件并使用以下名称方案保存它们:
TITLE(artist-track)-ID.mp3
Run Code Online (Sandbox Code Playgroud)
所以一个实际的文件名看起来像:
EPIC RAP BATTLE of MANLINESS-_EzDRpkfaO4.mp3
Run Code Online (Sandbox Code Playgroud)
文件夹中的其他一些文件名如下所示:
EPIC RAP BATTLE of MANLINESS-_EzDRpkfaO4.mp3
Martin Garrix - Animals (Official Video)-gCYcHz2k5x0.mp3
Stromae - Papaoutai-oiKj0Z_Xnjc.mp3
Run Code Online (Sandbox Code Playgroud)
起初,这没有问题。在 Rhytmbox 中听我的音乐时并没有打扰我。但是当转向手机或其他设备时,看到这么长的名字会让人很困惑,一些玩家,比如三星的,把名字的最后一部分(第二个破折号后的 id)当作专辑之类的东西。
我想创建一个 bash 脚本,删除所有文件名称中第二个破折号之后的内容,因此它将使它们像这样:
从: Martin Garrix - Animals (Official Video)-gCYcHz2k5x0.mp3
到: Martin Garrix - Animals (Official Video).mp3
是否也可以指示youtube-dl从现在开始排除该 ID?
我目前正在使用以下命令下载:
youtube-dl --extract-audio --audio-quality 0 --audio-format mp3 URL
Run Code Online (Sandbox Code Playgroud)
ste*_*ver 11
我将使用基于 Perl 的rename命令 - 例如,要删除-以.mp3后缀开头的最短单词字符序列,您可以尝试
rename -nv -- 's/-\w+?[.]mp3$/.mp3/' *.mp3
Run Code Online (Sandbox Code Playgroud)
该n选项以“试运行”模式运行命令 - 如果匹配显示正确,请删除该n选项并再次运行它。
您不想要的部分是视频 ID。您可以使用 youtube-dl 的输出模板功能:
--output "%(title)s"
Run Code Online (Sandbox Code Playgroud)
这将仅使用标题并省略 ID。youtube-dl不带参数运行以查看其他选项。
您可以修复现有的下载:
for i in *; do mv "$i" `basename "$i" .mp3 | cut -f -2 -d "-"`.mp3; done
Run Code Online (Sandbox Code Playgroud)
(这相当于 Jakke 的回答)。
小智 6
sed 可以在一行中完成此操作,尽管方式相当复杂。
ls | sed 's/\(.*\)\(-.*\)/mv \"&\" \"\1.mp3\"/' | bash
Run Code Online (Sandbox Code Playgroud)
这首先列出当前目录中的文件(假设您要重命名的所有文件都在当前目录中),然后使用 sed 的 s/regex/replacement 命令生成一个合理的 mv 命令,然后将其通过管道传输到执行它的 bash . 这假设您的所有文件都是“AC.mp3”或“A - BC.mp3”形式的。下面是它的工作原理:
sed 命令的正则表达式部分是
\(.*\)\(-.*\)
Run Code Online (Sandbox Code Playgroud)
这将名称“分组”为两组(用转义括号分隔):一个匹配“.*”(任意数量的任何字符),另一个匹配“-.*”,破折号后跟任意数量的任意字符。请注意,这匹配整个文件名(分为两组)。另请注意,由于使用了“贪婪”正则表达式,因此第一组将根据需要匹配“AC.mp3”和“A - B”中的“A”,而不仅仅是“A - BC.mp3”中的“A”。
sed 命令的替换部分是
mv \"&\" \"\1.mp3\"/
Run Code Online (Sandbox Code Playgroud)
请注意, & 字符指示 sed 插入与正则表达式匹配的整个模式,在这种情况下是整个文件名,而 \1 指示 sed 插入与第一个分组“.*”匹配的文件名部分。这两个与前面的 mv 和尾随的 .mp3 相结合,并带有转义引号以生成合理的重命名命令。例如,对于“A - BC.mp3”,完整的 sed 命令将产生:
mv "A - B-C.mp3" "A - B.mp3"
Run Code Online (Sandbox Code Playgroud)
最后,所有这些都通过管道传输到 bash,它愉快地执行 mv(重命名)命令。