2008-09-22 10 views
265

Я пытаюсь найти ftp-папку с помощью ftp-клиента командной строки, но до сих пор я мог использовать «get» для получения отдельных файлов.Как рекурсивно загрузить папку через FTP в Linux

+3

правильный ответ с 6 апреля 11 в 14:13 по lkuty. Не используйте `mget`, он не рекурсивный вообще. Ответ от 22.09.2008 в 9:01 Thibaut Barrère легче понять, но должен добавить опцию `-l 0`, как указано в комментариях – chriscatfr 2012-11-11 22:12:34

ответ

517

Вы можете рассчитывать на Wget, который обычно обрабатывает FTP получить должным образом (по крайней мере, в моем собственном опыте). Например:

wget -r ftp://user:[email protected]/ 

Вы также можете использовать -m, который подходит для зеркалирования. В настоящее время он эквивалентен -r -N -l inf.

Если у вас есть специальные символы в данных учетных данных, вы можете указать аргументы и --password, чтобы заставить его работать. Пример с пользовательским логином с определенными символами:

wget -r --user="[email protected]" --password="Pa$$wo|^D" ftp://server.com/ 

EDIT Как отметил @asmaier, смотреть на то, что даже если -r для рекурсии, то есть уровень по умолчанию макс 5:

 -r 
     --recursive 
      Turn on recursive retrieving. 

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

Если вы не хотите упустить подкаталоги, лучше использовать зеркальное отображение опции -m:

 -m 
     --mirror 
      Turn on options suitable for mirroring. This option turns on recursion and time-stamping, sets infinite 
      recursion depth and keeps FTP directory listings. It is currently equivalent to -r -N -l inf 
      --no-remove-listing. 
17

Если вы можете использовать scp вместо ftp, опция -r сделает это за вас. Я бы посмотрел, можно ли использовать более современный механизм передачи файлов, чем FTP.

+2

Я голосовал это, потому что это была именно моя первая мысль, даже если оно не строго ответьте на вопрос как есть. – metao 2008-09-22 09:04:49

+0

Какой из них вы предлагаете @ greg-hewgill? У меня есть аналогичная проблема – Michal 2016-08-25 11:25:08

+0

`scp` все равно попытается использовать ssh, который не будет работать, если у вас есть только учетные данные FTP. Чувствуется странное реагирование на комментарий 2008 года, в котором говорится, что технология, за которой я застрял, не является современной :(Хорошо, что в прошлом году мне исполнилось 18 лет, когда вы отправили свой комментарий. – 2017-06-17 19:34:35

-2

Try MGET:

mget remote-files 
       Expand the remote-files on the remote machine and do a get for each file name thus produced. 
       See glob for details on the filename expansion. Resulting file names will then be processed 
       according to case, ntrans, and nmap settings. Files are transferred into the local working 
       directory, which can be changed with ‘lcd directory’; new local directories can be created with 
       ‘! mkdir directory’. 

Вам также может потребоваться выключить запрос, так что не просит для каждого файла (см команду propmt)

Но с помощью УПП или Rsync через SSH, вероятно, лучше, чем ftp, если сможете.

Чтобы резюмировать:

cd /dir 
prompt 
interactive mode off 
mget * 
+8

Это не отображается для рекурсивной загрузки любых папок, находящихся в удаленном каталоге. – 2012-06-01 17:53:36

+3

Я думал, что сойду с ума, когда прочитаю ответ; Я никогда не знал, что mget был рекурсивным. Оказывается, это не так. Это не правильный ответ на название этого вопроса. Ответы wget ниже работают хорошо. – Jason 2012-10-23 19:56:31

+2

Даун-проголосовали, поскольку это неправильный ответ – rroche 2012-11-01 23:44:24

25
ncftp -u <user> -p <pass> <server> 
ncftp> mget directory 
2

Если вы можете, я настоятельно рекомендую вам tar и bzip (или gzip, независимо от плывет лодка) каталог на удаленном компьютере, для каталога любого значительного размера, экономии пропускной способности вероятно, будет стоить времени на zip/unzip.

7

Существует 'NcFTP', который доступен для установки в Linux. Это работает по протоколу FTP и может использоваться для рекурсивного скачивания файлов и папок. работает над linux. Был использован и отлично работает для рекурсивной передачи файлов/файлов.

Проверить эту ссылку ... http://www.ncftp.com/

3

Если вы хотите придерживаться командной строки FTP, вы должны попробовать NcFTP. Затем вы можете использовать get -R для рекурсивного получения папки. Вы также получите завершение.

2

wget -r ftp://url

Работа идеально подходит для Redhat и Ubuntu

-4

тумблера подсказки по командной строке.

Использование:

ftp>cd /to/directory  
ftp>prompt  
ftp>mget * 
138

Просто, чтобы дополнить ответ дал Тибо Barrere.

Я использовал

wget -r -nH --cut-dirs=5 -nc ftp://user:[email protected]//absolute/path/to/directory 

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

  • -nH избегает создания каталога с именем имя сервера
  • -nc избегает создания нового файла, если он уже существует в месте назначения (он просто пропускается)
  • --cut-каталоги = 5 позволяет мне взять содержимое каталога/absolute/path/to/и поместить его в каталог, где я запускаю wget. Число 5 используется для фильтрации 5 компонентов пути. Двойная косая черта означает дополнительный компонент.
18

Если на вашей машине установлено lftp, используйте mirror dir. И все готово. См. Комментарий Ciro ниже, если вы хотите рекурсивно загрузить каталог.

1

Вы не должны использовать ftp. Подобно telnet, он не использует безопасные протоколы, а пароли передаются в ясном тексте. Это упрощает для третьих лиц запись вашего имени пользователя и пароля.

Для копирования удаленных каталогов удаленно, эти параметры лучше:

  • rsync является наиболее подходящим инструментом, если вы можете войти через ssh, потому что она копирует только различия, и может легко перезагрузить в середине в случае разрыва соединения.

  • ssh -r - второй вариант, позволяющий рекурсивно копировать структуры каталогов.

См:

  • rsync человек страница

  • ssh человек страница