Использование wget для рекурсивной выборки каталога с произвольными файлами в нем
Вопрос
У меня есть веб-каталог, где я храню некоторые конфигурационные файлы.Я бы хотел использовать 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"
}
Использование:
- Добавить к
~/.bashrc
или вставить в терминал wgetod "http://example.com/x/"