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。如果您有任何问题,请告诉我。
希望你们一切都好。我想知道你是否可以编写一个 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。如果您有任何问题,请告诉我。