我正在使用 xargs 并行下载大量文件。我遇到的问题是某些下载在一段时间后失败,因此一旦我运行完列表,并非所有下载都已成功完成,我必须重新运行命令。
cat links.txt | xargs -n 2 -P 16 wget -c -q -O
有没有办法将成功下载的文件名输出到文件中?我能找到的唯一解决方案是解析 wget 日志文件。
答案1
使用 GNU Parallel 代替xargs
:
cat links.txt | parallel --joblog my.log -n 2 -P 16 wget -c -q -O
现在看看Exitval
中的列my.log
。
如果您要使用退出值重试,则 GNU Parallel 有重试作业的选项:--retries
、 和--retry-failed
。
答案2
解析 wget 的输出或其日志是有效的。例如,
$ wget -O fixedgear.html https://www.sheldonbrown.com/fixedgear.html 2>&1 | \
awk '/saved/ { print $6 }' | \
sed -e 's/^.//' -e 's/.$//'
README.md
管道中的第一步尝试下载文件,第二步查找 wget 来声明文件已成功保存,如果是则输出它,最后一步只是删除文件名中的引号。
--tries
调整 wget 中和的值--waitretry
也可能有助于您的初始并行下载首次成功。