На самом деле это не вопрос, но альтернативные ответы, безусловно, приветствуются! :)

Иногда мне нужно скачать файлы, перечисленные в списке каталогов Apache, например, как:

... в данном каталоге на моем компьютере, и я хотел бы использовать инструменты командной строки для этого.

Что касается wget , то на самом деле есть некоторые переключатели, которые должны присутствовать - отмечая, что wget имеет тенденцию либо загружать отдельные элементы, либо восстанавливать папки сервера локально!

Поскольку я потратил полчаса на то, чтобы выяснить, что это за правильные ключи (для локального копирования удаленных файлов, например, через FTP), я хотел бы документировать их здесь; так что ссылка выше будет загружена с:

wget -nd -r -l 1 http://www.gnu-darwin.org/www001/src/ports/net/samba-libsmbclient/work/samba-3.0.28/source/libsmb/

... где:

   -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 [...]

   -r
   --recursive
       Turn on recursive retrieving.

   -l depth
   --level=depth
       Specify recursion maximum depth level depth.  The default maximum
       depth is 5.

Было бы неплохо услышать альтернативы вышеупомянутой команде - возможно, с использованием другого набора ключей для wget - или, возможно, с помощью curl или других пакетов ...

2 ответа2

1

Через некоторое время, благодаря указателям @ jw013 и синхронизации с списком каталогов сервера Apache - Unix & Linux Stack Exchange, я наконец-то нашел свою "окончательную" команду wget .

Предположим, у вас есть дерево файлов и каталогов в каталоге с именем myfiles_dir , и пусть этот каталог будет доступен через список каталогов Apache по http://localhost/shared/myfiles_dir . Затем вы можете синхронизировать каталог локально с:

wget -r -N --no-parent --reject '*index.html*' -nH --cut-dirs=1 http://localhost/shared/myfiles_dir/

... где:

-r,  --recursive              specify recursive download.
-N,  --timestamping           don't re-retrieve files unless newer than
                              local.
-np, --no-parent              don't ascend to the parent directory.
-R,  --reject=LIST            comma-separated list of rejected extensions.
-nH, --no-host-directories    don't create host directories.
     --cut-dirs=NUMBER        ignore NUMBER remote directory components.

Это позволит загрузить содержимое в подкаталог myfiles_dir созданный в каталоге, из которого был вызван wget (рабочий каталог), без каких-либо остаточных файлов index.html .

Обратите внимание, что завершающая косая черта / после http ссылки / адреса чрезвычайно важна: если ее там нет - как в http://localhost/shared/myfiles_dir - при повторных вызовах wget из того же локального рабочего каталога, HTML- код список каталогов будет сохранен в виде нескольких копий, например myfiles_dir.1 , myfiles_dir.2 т. д., несмотря на любые переключатели (хотя списки каталогов HTML не будут сохраняться ни для каких подкаталогов внутри, как было запрошено; также, в самый первый раз команда выполняется, не будет сохранен список каталогов HTML для myfiles_dir).

Однако с помощью косой черты - как в http://localhost/shared/myfiles_dir/ - никакие списки каталогов HTML не будут сохраняться ни для одного каталога, включая "корневой" myfiles_dir , после повторных вызовов wget из того же локального местоположения.

1

Смотрите также параметры -nH aka --no --no-host-directories и --cut-dirs . Я также часто использую --accept/-A и --reject/-R .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .