一次下载多个 URL

the*_*ror 7 download wget

我知道wget -i作为下载 URL 列表的一种方式。唯一的麻烦是我需要将一些不同的 POST 数据传递给每个数据,这适用于使用的单个 url,wget --post-data=但不适用于列表。

我对任何 CLI 下载器,甚至 JS 或 Python 中的东西都持开放态度。但是,我想获得每次下载的进度条或每次 dl 完成时更新的日志文件,或了解 dl 何时完成的其他方式。

ter*_*don 4

如果您已有 URL 列表,只需将 POST 数据添加到该列表即可。就像是:

www.example.com    postdata1
www.foo.com
www.bar.com       second_post_data
Run Code Online (Sandbox Code Playgroud)

然后,不使用-i,而是在 bash 循环中读取文件并将数据传递给 wget:

while read url post; do wget --post-data="$post" $url; done < list.txt
Run Code Online (Sandbox Code Playgroud)

要并行运行它们以便同时下载多个文件,请使用&而不是;. wget但要小心,这将为每个 URL启动一个单独的进程。

while read url post; do wget --post-data="$post" $url & done < list.txt
Run Code Online (Sandbox Code Playgroud)

我用于启动此类事情的一个技巧是跟踪当前正在运行的数量,并且仅在数量低于阈值(例如 10)时运行下一个:

while read url post; do 
 while [[ "$(pgrep -fc wget)" -gt 9 && $c -gt 10 ]]; do sleep 1; done; 
 ((c++));  
 echo "Launching $url ($c)"; 
 wget --post-data="$post" $url >/dev/null 2>&1 && echo "$c finsihed" & 
done < list.txt
Run Code Online (Sandbox Code Playgroud)

这将启动前 10 个 URL,然后等待一个 URL 完成并启动下一个。