cURL 或 xargs:显示进度

cURL 或 xargs:显示进度

我正在使用 cURL 下载许多文件并将它们连接到 STDOUT。大约 100,000 个小文件。我想查看 100,000 个文件的进度。使用 curl 或将 curl 插入 xargs 是否可行?

仅对标准命令行解决方案感兴趣。

答案1

您可以在这里做一些不同的事情:但由于不知道您的 curl 方法到底是什么,我只能提供一些建议。

进行迭代计数循环:

for file {1..100000}; do echo "downloading: $file" >&2 ; curl [whatever] ; done 这会将“下载:$file”重定向到 STDERR,因此如果您在 STDOUT 上使用重定向,它不会弄乱它,但您仍然可以在屏幕上看到它

for file {1..100000}; do echo "downloading: $file" >> progress.out ; curl [whatever] ; done 这会将进度写入文件,因此它根本不会显示在屏幕上,然后您只需 tail -f progress.out

如果你的 curl 不是迭代的:

1号航站楼: curl [whatever] | tee progress.out

2 号航站楼: watch -n5 "grep -c '[unique file delimiter]' progress.out"

tee 将 STDOUT 的副本写入文件,然后您 grep count 查找每个 HTML 文档仅出现一次的内容……可能是<HEAD><HTML>标签或其他内容。Watch 将每 5 秒运行一次 grep,以让您知道已完成多少次。

答案2

GNU Parallel 现在或多或少已经成为了标准:

cat urls | parallel -j30 --eta curl ... > out

额外的好处:多个卷曲将并行运行。

观看介绍视频以了解更多信息:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

相关内容