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

StackOverflow https://stackoverflow.com/questions/273743

  •  07-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

Если - 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
wget -r http://mysite.com/configs/.vim/

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

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

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

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

Все, что вам нужно, - это два флага, один из которых " -r " для рекурсии и " -не-родительский (или -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.

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

wget -r http://stackoverflow.com/

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

wget --recursive (...)

... получает только index.html вместо всех файлов.

Временное решение: заметить перенаправления 301 и попробовать новое местоположение & # 8212; учитывая новый URL, wget получил все файлы в каталоге.

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

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/"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top