Использование 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.