Как рекурсивно скачать папку через FTP на Linux
Я пытаюсь открыть папку с помощью ftp-клиента из командной строки, но до сих пор мне удавалось использовать "get" только для получения отдельных файлов.
12 ответов
Вы можете положиться на 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.
Просто чтобы дополнить ответ, который дал Тибо Баррер.
я использовал
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 компонентов пути. Двойная косая черта означает дополнительный компонент.
Если lftp
установлен на вашем компьютере, используйте mirror dir
, И вы сделали. Смотрите комментарий Сиро ниже, если вы хотите рекурсивно скачать каталог.
Если вы можете использовать scp
вместо ftp
, -r
вариант сделает это за вас. Я бы проверил, можно ли использовать более современный механизм передачи файлов, чем FTP.
Вместо этого используйте WGet. Он поддерживает протоколы HTTP и FTP.
wget -r ftp://mydomain.com/mystuff
Удачи!
ссылка: http://linux.about.com/od/commands/l/blcmdl1_wget.htm
Существует "ncftp", который доступен для установки в Linux. Это работает по протоколу FTP и может быть использовано для рекурсивной загрузки файлов и папок. работает на Linux. Был использован и работает нормально для рекурсивной передачи папок / файлов.
Проверьте эту ссылку... http://www.ncftp.com/
Если вы хотите придерживаться командной строки FTP, вы должны попробовать NcFTP. Затем вы можете использовать get -R для рекурсивного получения папки. Вы также получите завершение.
Если вы можете, я настоятельно рекомендую вам tar
а также bzip
(или же gzip
независимо от того, что перемещает вашу лодку) каталог на удаленной машине - для каталога любого значительного размера экономия полосы пропускания, вероятно, будет стоить времени, чтобы сжать / разархивировать.
Вы не должны использовать ftp
, подобно telnet
он не использует безопасные протоколы, а пароли передаются в виде открытого текста. Это позволяет третьим лицам легко получить ваше имя пользователя и пароль.
Для удаленного копирования удаленных каталогов эти параметры лучше:
rsync
является наиболее подходящим инструментом, если вы можете войти черезssh
, потому что он копирует только различия и может легко перезапустить в середине в случае разрыва соединения.ssh -r
является вторым лучшим вариантом для рекурсивного копирования структур каталогов.
Увидеть:
Переключить подсказку командой PROMPT.
Использование:
ftp>cd /to/directory
ftp>prompt
ftp>mget *