Использование wget для рекурсивного извлечения каталога с произвольными файлами в нем - PullRequest
522 голосов
/ 08 ноября 2008

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

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

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

Ответы [ 12 ]

879 голосов
/ 08 ноября 2008

Вы должны передать параметр -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/
115 голосов
/ 17 марта 2011

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

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data
110 голосов
/ 23 ноября 2012

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

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

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

35 голосов
/ 24 февраля 2014

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

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

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

wget -m -e robots=off --no-parent http://example.com/configs/.vim/
29 голосов
/ 15 февраля 2013

Вот полная команда 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 голосов
/ 16 мая 2013

Если --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
5 голосов
/ 08 ноября 2008
wget -r http://mysite.com/configs/.vim/

у меня работает.

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

4 голосов
/ 21 октября 2014

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

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/
2 голосов
/ 02 марта 2018

Все, что вам нужно, это два флага, один - "-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.

1 голос
/ 19 октября 2017

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

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"
}

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

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