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
и удалить этот файл потом?