Как рекурсивно загрузить папку через FTP в Linux [закрыто]


325

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


5
правильный ответ от 6 апреля 11 в 14:13 по лкуты. Не используйте mget, это не рекурсивно. ответ от 22 сентября 2008 года в 9:01 Тибо Баррера легче понять, но он должен добавить опцию, -l 0как указано в комментариях
chriscatfr

Ответы:


635

Вы можете положиться на wget, который обычно правильно обрабатывает ftp (по крайней мере, по моему опыту). Например:

wget -r ftp://user:pass@server.com/

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

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

wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/

РЕДАКТИРОВАТЬ Как указал @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.

121
Лучше использовать wget -m( --mirror). wget -rпо умолчанию ограничена глубиной рекурсии до 5.
Asmaier

13
Я должен был использовать --userи --passwordна Red Hat. Мой виджет таков: GNU Wget 1.11.4 Red Hat modifiedинтересно, это версия или дистрибутив ...
devin

61
Вы можете установить бесконечный уровень рекурсии с помощью -l 0, поэтому нет необходимости использовать, --mirrorкоторый может иметь некоторые нежелательные побочные эффекты, такие как .listing файлы
Hnatt

28
Я использую wget --ask-password -rl 99 ftp://user@server.com. Таким образом, пароль не отображается psи не сохраняется в истории. Конечно, по природе ftp он отправляется на сервер в незашифрованном виде.
Уолтер Тросс

7
Напоминание для новичков bash: вам придется использовать одинарные кавычки, если в вашем имени пользователя или пароле есть контрольные символы (например $), например--user='user' --password='pa$$word'
tobek

164

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

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

wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory

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

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

3
Brilliant. Возможность пропустить уже существующие файлы отлично подходит для ознакомления с последними дополнениями по миграции на сервер. rsync более эффективен и более гибок, но иногда эта опция просто недоступна, и можно использовать только FTP.
Джейсон

Хорошие параметры здесь особенно -nc и --cut-dirs. Спасибо, что поделился!
Ланс Кливленд

2
Я не всегда доверяю «пропустить существующие файлы», потому что один из них может быть неполным или отличаться по размеру и содержанию, но хорошо, что он упомянул этот вариант
Даниэль В.

Даже сегодня я все еще использую эту команду wget, когда не могу использовать rsync. -Nc и --cut-dirs очень полезны!
Полусумасшедший

4
Потрясающие! И если вы не хотите вводить пароль в командной строке, вы можете использовать --ftp-user=USERи --ask-password.
Shoover

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

Я не мог войти на FTP-сервер, используя параметры, но используя структуру open ftp://USERNAME:PASSWORD@HOSTпосле запуска ncftp…
feeela

+1 - я знаю, что этот пост старый, но я только что натолкнулся на него, и ncftp был действительно прост в использовании. Я использовал -R для рекурсивного получения с помощью ncftpget
Зак Макомбер

определенно более надежный, чем wgetв режиме TAR. Спасибо!
Lencinhaus

3
Это не работает, как указано в Ubuntu 14.04. Синтаксис, который работал для меня, был «получить каталог -R» вместо mget.
Иван

Работал для меня на Ubuntu 14.04. Мне не нужно было думать, что все это было просто там.
Эшли

22

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


7
Кстати, mirror -R dirвыполняет рекурсивную загрузку / обновление каталога
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
также можно использовать mirror ./для загрузки всех файлов и папок рекурсивно в текущем пути.
Наби КАЗ

Вы также можете просто напечатать mirror, для текущего каталога и его подпапок.
Майкл

18

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


2
Я проголосовал за это, потому что это была моя первая мысль, хотя она не дает точного ответа на вопрос как есть.
Метао

Какой из них вы предлагаете @ greg-hewgill? У меня похожая проблема
Михал Гонда

1
scpвсе равно будет пытаться использовать ssh, который не будет работать, если у вас есть только учетные данные FTP. Чувствует себя странно, отвечая на комментарий 2008 года о том, что технология, с которой я застрял, не современна :( Старый добрый 2008 год, мне исполнилось 18 лет в день, когда вы опубликовали свой комментарий.
aexl


7

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

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


2
ncftp также работает на windows
Илья

Я люблю ncftp! Спасибо.
Jocull

3

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


Может быть, в 2008 году, но в 2013 году пропускная способность больше не имеет значения, и у вас может быть FTP, но не консольный доступ :-)
Даниэль В.

3

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



1

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

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

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

  • ssh -r это второй лучший вариант для рекурсивного копирования структур каталогов.

Видеть:


не безопасный, просто ftp
JosFabre

это 2015. FTP не должен использоваться.
Тило

2
Я согласен. И предложения для лучшей безопасности всегда должны быть даны. Но вопрос был о FTP, так что говорить, что его не следует использовать, не помогает
JosFabre

Я с уважением не согласен. Они используют не тот инструмент для работы. Они должны научиться использовать безопасные и современные инструменты, а не фтп 1980-х. Более конкретно, никто не должен больше запускать ftp-сервер: P
Tilo

4
Извините, но только на прошлой неделе я обращался к серверу, который имел только FTP-соединение. Моя задача состояла в том, чтобы уйти от этого.
Антти Хаапала

-6

переключить подсказку командой PROMPT.

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

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

9
Проголосовавший за 0 голос: mget не является рекурсивным.
Ланс Кливленд
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.