- 我有一些大的东西需要递归下载
- 大小估计> 150GB(有人告诉我这就是大概的大小)
- 现在我没有存储空间
- 所以我需要弄清楚总大小有多大,然后我会做一些事情来获得更多的存储空间
- 在获得更多存储空间之前,我需要计算出总大小
- 目标 URL 是某种 http 文件服务器托管的文件目录
如何wget --recursive
在不先下载所有文件的情况下获得总大小?
注意:此问题仅适用于包含静态内容的网页(即不是动态生成的。即具有明确定义的内容长度的内容。)
答案1
这是我发现有效的方法:
#!/bin/bash
tmpdir=$(mktemp -d)
(
cd ${tmpdir}
wget --recursive -erobots=off --no-parent --spider --server-response http://mirrors.rit.edu/rocky/9.1/BaseOS/x86_64/os/ 2>&1 |grep --line-buffered -i content-length | gawk '{sum+=$2}END{print sum/1e6}'
)
find ${tmpdir} -type d -delete
wget 参数的解释:
--recursive
告诉wget
递归目录中的所有文件-erobots
告诉wget
继续递归,即使有一个robots.txt
文件--no-parent
告诉wget
不要向上递归(即父级),因为这不是我想要的(也可能不是任何人想要的)--spider --server-response
告诉wget
只打印每个文件的标题- 我认为此
--spider
选项会意外删除磁盘上的所有文件,因此我下载的许多千兆字节和数千个文件被此功能意外删除。所以我在临时目录中运行该命令以阻止此行为意外删除文件。
- 我认为此
grep
告诉用于仅抓取内容长度以字节为单位的行gawk
Tell 用于对字节求和,然后打印字节数(以 MB 为单位)