Как рекурсивно загрузить каталог на 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.

Другие вопросы по тегам