Как рекурсивно загрузить папку через 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 для рекурсивного получения папки. Вы также получите завершение.

Джаз
источник
3

wget -r ftp://url

Отлично работает для Redhat и Ubuntu

Phillip
источник
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 не является рекурсивным.
Ланс Кливленд