一位用户建议我发帖询问如何将多个 youtube-dl 下载合并为一个脚本来运行。我正在下载许多 youtube 频道,目前每个频道都在一个.sh
可以运行的不同文件中,但我被告知可以将它们全部合并为一个文件。我的脚本示例如下:
./youtube-dl ytuser:user -ciw -o "/path/to/directory/%(upload_date)s-% \
(title)s.%(ext)s" --download-archive "/path/to/directory/downloaded.txt" \
--add-metadata --write-info-json --write-description --write-thumbnail \
--write-annotations --embed-subs -f \
"bestvideo[height<=720]+bestaudio/best[height<=720]" --merge-output-format \
"mkv"
因此,我为每个不同的频道都准备了相同的脚本,当然,我修改了脚本,以便每个频道都有自己的目录。由于我有这么多的频道,所以我想将它们全部放入.sh
文件中,然后编写一个脚本来运行所有.sh
文件,但又被告知这种方法过于复杂,有一种方法可以将所有不同的命令行放入一个脚本中运行。
澄清:
因此,/path/to/directory/
每个频道的 都会有所不同,通常我不需要 URL,因为ytuser:*user*
代码部分会处理它。如果有 URL,它只会添加到代码的最后,并且ytuser:*user*
会被删除。
目前我有很多不同的.sh
文件,它们都具有针对一个频道的特定代码,因此例如运行h3h3Productions.sh
将打开一个终端,将频道“h3h3Productions”从 YouTube 下载到类似目录中,/youtube-dl/videos/vlogs/h3h3Productions/
并且运行WarLeaks.sh
将下载 YouTube 频道“WarLeaks”到目录中youtube-dl/videos/footage/WarLeaks/
。
因此,每个文件中的代码.sh
相对相同,但是代码的/path/to/directory/
和都是不同的,并且每个通道的也不同。/path/to/directory/.downloaded.txt
--archive-download
ytuser:*user*
我希望能够做的是只使用一个.sh
文件,其中包含多个不同渠道的代码。这样,.sh
我就不用单独运行每个文件,而只需使用一个.sh
文件,运行时它将激活其中包含的所有下载,因为它将包含八个或十个不同渠道的代码。
我希望这有助于澄清,如果没有,请告诉我。
答案1
这需要一个功能,怎么样:
#! /bin/bash
yt(){
./youtube-dl "ytuser:"$1 -ciw -o $2"/%(upload_date)s-%(title)s.%(ext)s" --download-archive $2"/downloaded.txt" --add-metadata --write-info-json --write-description --write-thumbnail --write-annotations --embed-subs -f "bestvideo[height<=720]+bestaudio/best[height<=720]" --merge-output-format "mkv"
}
yt "user" "/path/to/directory/"
yt "differentuser" "/path/to/other/directory/"
…
实现此目的的步骤很简单,只需确定命令的哪些部分真正发生变化,用变量替换它,编写一个函数并根据需要调用它。可能有更好的解决方案,但我们需要一些精确的脚本来找到它。