wget --warc-file - recursive, предотвращать запись отдельных файлов

Я запускаю 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.

2 ответа

Решение

tl;dr Добавить параметры --delete-after а также --no-directories,

вариант --delete-after дает команду wget удалить каждый загруженный файл сразу после завершения его загрузки. Как следствие, максимальное использование диска во время выполнения будет иметь размер файла WARC плюс размер одного наибольшего загруженного файла.

вариант --no-directories предотвращает wget оставить позади бесполезное дерево пустых каталогов. По умолчанию wget создает дерево каталогов, которое отражает дерево на хосте, и загружает каждый файл в соответствующий каталог зеркального дерева. Wget делает это, даже если загруженный файл является временным из-за --delete-after, Чтобы предотвратить это, используйте опцию --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 и удалить этот файл потом?

Другие вопросы по тегам