如何在不先下载所有文件的情况下获得 wget 递归的总大小?

如何在不先下载所有文件的情况下获得 wget 递归的总大小?
  • 我有一些大的东西需要递归下载
  • 大小估计> 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告诉用于仅抓取内容长度以字节为单位的行
  • gawkTell 用于对字节求和,然后打印字节数(以 MB 为单位)

相关内容