我知道wget -i作为下载 URL 列表的一种方式。唯一的麻烦是我需要将一些不同的 POST 数据传递给每个数据,这适用于使用的单个 url,wget --post-data=但不适用于列表。
我对任何 CLI 下载器,甚至 JS 或 Python 中的东西都持开放态度。但是,我想获得每次下载的进度条或每次 dl 完成时更新的日志文件,或了解 dl 何时完成的其他方式。
如果您已有 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 完成并启动下一个。
| 归档时间: |
|
| 查看次数: |
15546 次 |
| 最近记录: |