我运行wget创建warc
存档,如下所示:
$ wget --warc-file=/tmp/epfl --recursive --level=1 http://www.epfl.ch/
$ l -h /tmp/epfl.warc.gz
-rw-r--r-- 1 david wheel 657K Sep 2 15:18 /tmp/epfl.warc.gz
$ find .
./www.epfl.ch/index.html
./www.epfl.ch/public/hp2013/css/homepage.70a623197f74.css
[...]
我只需要epfl.warc.gz
文件。如何防止wget
创建所有单独的文件?
我试了如下:
$ wget --warc-file=/tmp/epfl --recursive --level=1 --output-document=/dev/null http://www.epfl.ch/
ERROR: -k or -r can be used together with -O only if outputting to a regular file.
tl;dr增加--delete-after
和--no-directories
选项
选项--delete-after
指示wget在下载完成后立即删除每个下载的文件。因此,执行期间的最大磁盘使用量将是WARC文件的大小加上单个最大下载文件的大小。
选项--no-directories
防止wget留下无用的空目录树。默认情况下,wget创建一个目录树,该目录树镜像主机上的目录树,并将每个文件下载到镜像树的适当目录中。即使下载的文件由于--delete-after
是临时的,wget也会这样做。要防止这种情况,请使用选项--no-directories
。
下面使用您给出的示例(稍作修改)演示了结果。
$ cd $(mktemp -d)
$ wget --delete-after --no-directories
--warc-file=epfl --recursive --level=1 http://www.epfl.ch/
...
Total wall clock time: 12s
Downloaded: 22 files, 1.4M in 5.9s (239 KB/s)
$ ls -lhA
-rw-rw-r--. 1 chadv chadv 1.5M Aug 31 07:55 epfl.warc
如果忘记使用--no-directories
,可以使用find -type d -delete
轻松地清理空目录树。
对于单个文件(没有--recursive
), -O /dev/null
选项将使wget不为输出创建文件。对于递归获取,/dev/null
不被接受(不知道为什么)。但是,为什么不直接通过-O tmpfile
将所有输出连接到一个文件中,然后删除这个文件呢?