Как рекурсивно загрузить каталог на FTP-сервер, используя только ftp или lftp?
Я пишу сценарий оболочки Linux, чтобы скопировать локальный каталог на удаленный сервер (удалив все существующие файлы).
Локальный сервер: ftp
а также lftp
команды доступны, нет ncftp
или любые графические инструменты.
Удаленный сервер: доступен только через FTP. Ни Rsync, ни SSH, ни FXP.
Я думаю о выводе списка локальных и удаленных файлов, чтобы сгенерировать скрипт lftp и затем запустить его Есть ли способ лучше?
Примечание: загрузка только измененных файлов будет плюсом, но не обязательна.
5 ответов
LFTP должен быть в состоянии сделать это за один шаг, в частности с lftp mirror
:
РЕДАКТИРОВАТЬ: синтаксис команды lftp сбивает с толку, исходный вызов, который я опубликовал, не работает. Попробуйте это так:
lftp -e "mirror -R {local dir} {remote dir}" -u {username}, {password} {host}
обратите внимание на цитаты вокруг аргументов -e
переключатель.
cd {local_dir}
lftp {server}
cd {remote_dir}
mput {local_dir}/*
Это сработало для меня, многие другие попытки провалились. Однажды в lftp, больше информации доступно через:
help mput
Основываясь на идее Фила об использовании зеркального режима lftp, эта команда добивается цели:
lftp -c 'open -e "mirror /tmp/thedir ftp://nico:mypass@remotehost/~/destination/" ftp://nico:mypass@localhost'
Недостаток заключается в том, что на локальном сервере должен быть запущен FTP-сервер.
Вместо обычного ответа на использование зеркалирования я часто считаю предпочтительнее использовать , особенно если нужно перенести несколько каталогов.
Например, учитывая следующее:
lftp> !ls
mydir1
mydir2
mydir3
mydir4
mydir5
... если целью является перенос каталоговmydir[2-4]
, вы можете либо неуклюже использоватьmirror
команда:
lftp mirror -R mydir2 mydir2
... и повторяем последовательно дляmydir3
иmydir4
... или вы можете использоватьmput
следующее:
lftp> mput -d mydir[2-4]/*
... и дело сделано. -d
опция здесь является ключевой:
lftp> help mput
Usage: mput [OPTS] <files>
Upload files with wildcard expansion
...
-d create directories the same as in file names and put the
files into them instead of current directory
...
Наконец-то получил ответ!!! Создать сценарий оболочки ftpmirror.sh
#!/bin/bash
path = /local-dir-path
lftp -e "mirror -R $path /$path" -u username,password ftp-server-ip
- Путь = локальный каталог, который мы хотим скопировать на FTP-сервер
- username = имя пользователя сервера ftp
- пароль = пароль FTP-сервера
- ftp-server-ip = IP-адрес ftp-сервера
Если пакет lftp не установлен, установите его, используя yum.