Как отразить каталог с помощью wget без создания родительских каталогов?

Я хочу отразить папку через FTP, например:

wget --mirror --user=x --password=x ftp://ftp.site.com/folder/subfolder/evendeeper

Но я не хочу создавать такую ​​структуру каталогов:

ftp.site.com -> папка -> подпапка -> даже глубже

Я просто хочу:

еще глубже

И все, что ниже этого, будет результирующей структурой. Также допустимо, чтобы содержимое evendeeper оказывалось в текущем каталоге, если на сервере созданы подкаталоги для подкаталогов evendeeper.

Я знаю об опции -np, согласно документации, которая просто не позволяет ей переходить по ссылкам на родительские страницы (не проблема для двоичных файлов, которые я зеркалирую через FTP). Я также знаю об опции -nd, но она вообще предотвращает создание какой-либо структуры каталогов, даже для подкаталогов evendeeper.

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


person Tom Boutell    schedule 18.02.2011    source источник


Ответы (4)


Для пути вида: ftp.site.com/a/b/c/d

-nH загрузит все файлы в каталог a/b/c/d текущего каталога, а -nH --cut-dirs=3 загрузит все файлы в каталог d текущего каталога.

person vs_inf    schedule 18.02.2011
comment
Спасибо, --cut-dirs был серебряной пулей, которую я искал. - person Tom Boutell; 20.02.2011
comment
Я бы изменил на --cut-dirs=4, если вам нужны все файлы из каталога d - person Mike; 08.10.2013
comment
-nH будет игнорировать только каталог хоста для меня. Вы можете установить --cut-dirs=100 для предотвращения почти всех предварительных каталогов -- отметьте - person Rex; 19.02.2016
comment
Совершенно очевидно, что с URL-адресом типа ftp.site.com/a/b/c/d/ нужен только контент в d/ и его подпапках. Есть ли опция автоматической обрезки или что-то подобное для wget, которая автоматически определяет глубину резки? - person con-f-use; 14.03.2016
comment
@con-f-use Я надеялся, что трюк --cut-dirs=100, предложенный @Rex (и в ответе Тони TCG ниже), достигнет это, но, увы, работает как -nd, то есть сглаживает всю иерархию, включая подкаталоги ниже того, который вы загружаете. Похоже, что нет автоматического решения, использующего только wget... - person waldyrious; 04.10.2017

Параметр -np (без родителя), вероятно, будет делать то, что вы хотите, связанный с -L 1 (я думаю, передо мной не было установки wget), что ограничивает рекурсию одним уровнем.

РЕДАКТИРОВАТЬ. в порядке. гах... может быть, мне следует подождать, пока я выпью кофе.. Существует --cut или аналогичная опция, которая позволяет вам "вырезать" указанное количество каталогов из выходного пути, так что для /a/b/c/d сокращение на 2 будет заставить wget создать c/d на вашем локальном компьютере

person Marc B    schedule 18.02.2011
comment
Вы имеете в виду: --cut-dirs=2 — Кроме того, -L — это --relative, поэтому вы, вероятно, имели в виду -l или --level=1. - person Denilson Sá Maia; 18.02.2011

Вместо того, чтобы использовать:

-nH --cut-dirs=1

использовать:

-nH --cut-dirs=100

Это сократит больше каталогов, и папки не будут созданы.

Примечание: 100 = количество папок, которые нужно пропустить. Вы можете изменить 100 на любое число.

person Tony TCG    schedule 20.04.2014
comment
Почему бы тогда просто не использовать -nd вместо этого? - person ffledgling; 31.03.2015

У меня было аналогичное требование, и следующая комбинация кажется идеальным выбором:

В приведенном ниже примере все файлы в http://url/dir1/dir2 (отдельно) загружаются в локальный каталог /dest/dir

wget  -nd -np -P /dest/dir --recursive http://url/dir1/dir2

Спасибо @ffledgling за подсказку на "-nd"

Для приведенного выше примера:

wget -nd -np --mirror --user=x --password=x ftp://ftp.site.com/folder/subfolder/evendeeper

Фрагменты из руководства:

   -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.
person pr-pal    schedule 07.09.2019