У меня есть веб-директория, в которой хранятся некоторые файлы конфигурации. Я хотел бы использовать wget для извлечения этих файлов и сохранения их текущей структуры. Например, удаленный каталог выглядит следующим образом:
http://mysite.com/configs/.vim/
.vim содержит множество файлов и каталогов. Я хочу повторить это на клиенте с помощью wget. Не могу найти правильную комбинацию флагов wget, чтобы сделать это. Есть идеи?
В команду wget
необходимо передать опцию -np
/--no-parent
(в дополнение к -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/
Для рекурсивной загрузки каталога, который отклоняет файлы 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 "" для рекурсии и
" - 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 /
Фактически, я получил первую строку из этого ответа именно из руководства по ласточкам, у них есть очень чистый пример к концу раздела 4.3.
Wget 1.18 может работать лучше, например,.Меня укусила ошибка версии 1.12, где...
wget --recursive (...)
.only получает index.html вместо всех файлов.. Обходной путь должен был заметить около 301 перенаправления и попробовать новое местоположение - учитывая новый 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/"
Следующая опция, кажется, идеальная комбинация при работе с рекурсивной загрузкой:
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.