Bash 用于从列表中下载多个文件的脚本

Bash script for downloading multiple files from a list

希望你们一切都好。我想知道你是否可以编写一个 bash 脚本,看起来像这样

需要注意的是我需要下载视频,因此需要使用 youtube-dl

主题 1

HTTP:....

HTTP:...

主题 2

HTTP:...

HTTP:...

主题 3

HTTP:...

HTTP:...

等等等等

我将所有这些都保存在一个文本文件中,我想要一个bash脚本,它将创建一个以TOPIC名称作为文件夹的目录,然后下载TOPIC下的每个URLS和然后继续下一个,创建一个目录,然后下载该目录的所有 URL。

这有意义吗?我对 bash 的经验非常非常少。

我可以使用 youtube-dl 命令轻松地只下载一个,但一次只下载一个会非常麻烦。

干杯

此解决方案依赖于将文本文件拆分为多个块,然后使用“-a”函数将 URL 传递给 youtube-dl:

-a, --batch-file FILE File containing URLs to download ('-' for stdin), one URL per line. Lines starting with '#', ';' or ']' are considered as comments and ignored.

topics=($(grep -v "http" file))
for ((i = 0 ; i < ${#topics[@]} ; i++))
do
mkdir ${topics[$i]}
cd ${topics[$i]}
sed -n "/^${topics[$i]}/,/^${topics[$i+1]}/p" ../file |\
sed '1d;$d' > to_be_downloaded.txt
youtube-dl -a to_be_downloaded.txt
rm to_be_downloaded.txt
cd ../
done

这将在 "file"(您的列表)中的最后一个主题上失败:手动完成这些缺失的 url。它应该按照所有其他人的要求工作。

要创建一个可执行的 bash 脚本来解决您的问题,请将此代码块粘贴到一个名为 'download.sh' 的文件中,该文件位于您拥有 'links.txt' 文档的同一目录中:

#!/bin/bash
topics=($(grep -v "http" links.txt))
for ((i = 0 ; i < ${#topics[@]} ; i++))
do
mkdir ${topics[$i]}
cd ${topics[$i]}
sed -n "/^${topics[$i]}/,/^${topics[$i+1]}/p" ../links.txt |\
sed '1d;$d' > to_be_downloaded.txt
youtube-dl -a to_be_downloaded.txt
rm to_be_downloaded.txt
cd ../
done

保存脚本,然后将脚本的权限更改为 'executable',方法是将其粘贴到终端中:

chmod +x download.sh

然后从终端执行脚本:

./download.sh

和以前一样,这将在您的 links.txt 文件中的最后一个主题上失败:手动执行这些缺失的 url。如果您有任何问题,请告诉我。