我正在使用 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