Использование wget для рекурсивного извлечения каталога с произвольными файлами в нем

У меня есть веб-каталог, в котором хранятся некоторые файлы конфигурации. Я хотел бы использовать wget, чтобы вытащить эти файлы и сохранить их текущую структуру. Например, удаленный каталог выглядит так:

http://mysite.com/configs/.vim/

.vim содержит несколько файлов и каталогов. Я хочу реплицировать это на клиенте с помощью wget. Кажется, не удается найти правильную комбинацию флагов wget, чтобы это сделать. Любые идеи?

Ответ 1

Вы должны передать параметр -np/--no-parent в wget (в дополнение к -r/--recursive, конечно), в противном случае он будет следовать ссылке в индексе каталога на моем сайте, чтобы родительский каталог. Таким образом, команда будет выглядеть так:

wget --recursive --no-parent http://example.com/configs/.vim/

Чтобы избежать загрузки автоматически сгенерированных файлов index.html, используйте параметр -r/--reject:

wget -r -np -R "index.html*" http://example.com/configs/.vim/

Ответ 2

Чтобы загрузить каталог рекурсивно, который отклоняет файлы index.html * и загружает файлы без имени хоста, родительского каталога и всей структуры каталогов:

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data

Ответ 3

Для всех, у кого есть похожие проблемы. Wget следует за robots.txt, который может не позволить вам захватить сайт. Не беспокойтесь, вы можете отключить его:

wget -e robots=off http://www.example.com/

http://www.gnu.org/software/wget/manual/html_node/Robot-Exclusion.html

Ответ 4

Вы должны использовать флаг -m (mirror), так как это не мешает с временными метками и рекурсивно откладывается.

wget -m http://example.com/configs/.vim/

Если вы добавите точки, упомянутые другими в этом потоке, это будет:

wget -m -e robots=off --no-parent http://example.com/configs/.vim/

Ответ 5

Здесь полная команда wget, которая работала для меня, чтобы загружать файлы из каталога сервера (игнорируя robots.txt):

wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/

Ответ 6

Если --no-parent не поможет, вы можете использовать опцию --include.

Структура каталогов:

http://<host>/downloads/good
http://<host>/downloads/bad

И вы хотите загрузить каталог downloads/good, но не downloads/bad:

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good

Ответ 7

wget -r http://mysite.com/configs/.vim/

работает для меня.

Возможно, у вас есть .wgetrc, который мешает ему?

Ответ 8

Чтобы получить рекурсивные каталоги с именем пользователя и паролем, используйте следующую команду:

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/

Ответ 9

Все, что вам нужно, это два флага, один - "-r" для рекурсии и "--no-parent" (или -np), чтобы не входить в '.' и "..". Вот так:

wget -r --no-parent http://example.com/configs/.vim/

Это. Он загрузит в следующее локальное дерево: ./example.com/configs/.vim. Однако, если вам не нужны первые два каталога, используйте дополнительный флаг --cut-dirs=2, как предлагалось в предыдущих ответах:

wget -r --no-parent --cut-dirs=2 http://example.com/configs/.vim/

И он загрузит ваше файловое дерево только в ./.vim/

Фактически, я получил первую строку из этого ответа именно из руководства по wget, у них есть очень чистый пример к концу раздела 4.3.

Ответ 10

Вы должны сделать это просто, добавив -r

wget -r http://stackoverflow.com/

Ответ 11

Wget 1.18 может работать лучше, например, я укушен ошибкой версии 1.12, где...

wget --recursive (...)

... только извлекает index.html вместо всех файлов.

Обходной путь состоял в том, чтобы заметить 301 переадресацию и попробовать новое местоположение - с учетом нового URL, wget получил все файлы в каталоге.

Ответ 12

Эта версия загружается рекурсивно и не создает родительские каталоги.

wgetod() {
    NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o / | wc -l)"
    NCUT=$((NSLASH > 0 ? NSLASH-1 : 0))
    wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1"
}

Использование:

  • Добавить в ~/.bashrc или вставить в терминал
  • wgetod "http://example.com/x/"

Ответ 13

Следующая опция кажется идеальной комбинацией при рекурсивной загрузке:

wget -nd -np -P/dest/dir --recursive http://url/dir1/dir2

Соответствующие фрагменты из справочных страниц для удобства:

   -nd
   --no-directories
       Do not create a hierarchy of directories when retrieving recursively.  With this option turned on, all files will get saved to the current directory, without clobbering (if a name shows up more than once, the
       filenames will get extensions .n).


   -np
   --no-parent
       Do not ever ascend to the parent directory when retrieving recursively.  This is a useful option, since it guarantees that only the files below a certain hierarchy will be downloaded.