Як завантажувати каталог рекурсивно на FTP-сервер просто за допомогою ftp або lftp?


19

Я пишу сценарій оболонки Linux для копіювання локального каталогу на віддалений сервер (видалення будь-яких існуючих файлів).

Локальний сервер: ftp і lftpкоманди доступні, відсутні ncftp або будь-які графічні інструменти.

Віддалений сервер: доступний лише через FTP. Ні rsync, ні SSH, ні FXP.

Я думаю про перелік локальних та віддалених файлів, щоб створити сценарій lftp, а потім запустити його. Чи є кращий спосіб?

Примітка. Завантаження лише модифікованих файлів було б плюсом, але не потрібно.


ncftp зовсім не в питанні? Найпростіше було б імхо. (і я знаю, що це зроблять так, як я цим
самим

Sirex: Я вважаю за краще це робити з інструментами, які за замовчуванням надходять на RedHat. Якщо lftp виявиться непридатним, я додам вимогу для користувачів встановити ncftp.
Ніколя Рауль

Синтаксис для wput(завантаженого ftp-uploader):wput dir/ ftp://user:pass@host/dir
kenorb

Відповіді:


39

lftp має бути в змозі зробити це за один крок, зокрема з lftp mirror:

EDIT: синтаксис команди lftp заплутаний, оригінальний виклик, який я опублікував, не працює. Спробуйте так:

lftp -e "дзеркало -R {локальний dir} {віддалений dir}" -u {ім'я користувача}, {пароль} {хост}

відзначте цитати навколо аргументів -eкомутатора.


1
+1 за підказку, що дзеркальний режим lftp працює навіть у тому випадку, якщо FXP недоступний (я переконався в протилежному, прочитавши tutorials.papamike.ca/pub/lftp.html, в якому сказано, що "обох серверів повинні підтримувати цей протокол для успіху цієї операції "). Однак ця конкретна команда не працює на моєму сервері Ubuntu: lftp: mirror: Ім'я або служба не відома, Невідома команда `-R '.
Ніколя Рауль

Я переформулював свою відповідь з кращою викликом lftp, сподіваюся, це допоможе.
Phil Hollenback

Зрештою, я працюю! Здається, що ви повинні переключити віддалений та локальний, щоб він працював. Будь ласка, оновіть, і я прийму цю відповідь. Ось командний рядок, який працює: lftp -e "дзеркало -R / tmp / mylocalfiles / var / www" -u remoteuser, remotepassword remoteserver
Ніколас Раул

Я думаю, що в документах lftp я бачив, що вам потрібно перемикати локальний та віддалений dir при використанні -R, але я, мабуть, забув. Оновлено мою відповідь.
Філ Холленбек

Як це виходить з ладу? Ви спробували запустити 'lftp -vvv' для більш детального виводу, щоб визначити, що він намагається зробити?
Phil Hollenback

1

Виходячи з ідеї Філа про використання дзеркального режиму lftp, ця команда виконує фокус:

lftp -c 'open -e "mirror /tmp/thedir ftp://nico:mypass@remotehost/~/destination/" ftp://nico:mypass@localhost'

Недоліком є ​​те, що для локального сервера потрібен FTP-сервер.


1
cd {local_dir}
lftp {server}
cd {remote_dir}
mput {local_dir}/*

Це працювало для мене, багато інших спроб провалювалися. Опинившись у lftp, більше інформації можна отримати через:

help mput

2
Тут, мабуть, було б краще використовувати mirror -R.
Гауте

@gauteh ти маєш рацію. найкраща відповідь ^
austin

0

Нарешті отримав відповідь !!! Створіть скрипт оболонки ftpmirror.sh

#!/bin/bash 
path = /local-dir-path
lftp -e "mirror -R $path /$path" -u username,password ftp-server-ip
  • Шлях = локальний каталог, який ми хочемо скопіювати на ftp-сервер
  • ім'я користувача = ім'я користувача ftp сервера
  • password = ftp пароль сервера
  • ftp-server-ip = IP-адреса ftp-сервера

Якщо пакет lftp не встановлений, його встановлено за допомогою yum.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.