Jak przesłać katalog rekurencyjnie na serwer FTP za pomocą ftp lub lftp?

19

Piszę skrypt powłoki systemu Linux, aby skopiować lokalny katalog na zdalny serwer (usuwając wszelkie istniejące pliki).

Serwer lokalny: ftp i lftppolecenia są dostępne, nie ma ncftp ani żadnych narzędzi graficznych.

Serwer zdalny: dostępny tylko przez FTP. Bez rsync, SSH i FXP.

Zastanawiam się nad listą plików lokalnych i zdalnych, aby wygenerować skrypt lftp, a następnie go uruchomić. Czy jest lepszy sposób?

Uwaga: Przesyłanie tylko zmodyfikowanych plików byłoby plusem, ale nie jest wymagane.

Nicolas Raoul
źródło
ncftp jest całkowicie wykluczone? Byłoby najłatwiejsze imho. (i wiem, że zrobi to tak, jak tego używam w ten sposób)
Sirex,
Sirex: Wolałbym to zrobić za pomocą narzędzi domyślnie dostępnych w RedHat. Jeśli lftp okaże się bezużyteczny, dodam wymaganie, aby użytkownicy zainstalowali ncftp.
Nicolas Raoul,
Składnia wput(wget-ftp-uploader):wput dir/ ftp://user:pass@host/dir
kenorb

Odpowiedzi:

39

lftp powinien być w stanie to zrobić w jednym kroku, w szczególności z lftp mirror:

EDYCJA: składnia polecenia lftp jest myląca, oryginalne wywołanie, które opublikowałem, nie działa. Spróbuj tak:

lftp -e "mirror -R {local dir} {remote dir}" -u {nazwa użytkownika}, {hasło} {host}

zwróć uwagę na cytaty wokół argumentów -eprzełącznika.

Phil Hollenback
źródło
1
+1 za poinformowanie mnie, że tryb lustrzany lftp działa, nawet jeśli FXP nie jest dostępny (byłem przekonany o odwrotności po przeczytaniu tutorials.papamike.ca/pub/lftp.html, który mówi „oba serwery muszą obsługiwać ten protokół, aby operacja się powiodła „). Jednak to polecenie nie działa na moim serwerze Ubuntu: lftp: mirror: nazwa lub usługa nieznana, nieznane polecenie `-R '.
Nicolas Raoul,
Przeredagowałem swoją odpowiedź, używając lepszego wywołania lftp, mam nadzieję, że to pomaga.
Phil Hollenback
W końcu GT to działa! Wygląda na to, że musisz przełączyć zdalny i lokalny, aby działał. Zaktualizuj, a zaakceptuję tę odpowiedź. Oto wiersz polecenia, który działa: lftp -e "mirror -R / tmp / mylocalfiles / var / www" -u remoteuser, remotepassword remoteserver
Nicolas Raoul
Myślę, że widziałem w dokumentach lftp, że musiałeś zmienić katalog lokalny i zdalny podczas używania -R, ale musiałem zapomnieć. Zaktualizowałem moją odpowiedź.
Phil Hollenback,
Jak to się nie udaje? Czy próbowałeś uruchomić „lftp -vvv”, aby uzyskać bardziej szczegółowe dane wyjściowe, aby określić, co on próbuje zrobić?
Phil Hollenback,
1

W oparciu o pomysł Phila dotyczący korzystania z trybu lustrzanego lftp, to polecenie załatwia sprawę:

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

Wadą jest to, że wymaga, aby serwer lokalny miał uruchomiony serwer FTP.

Nicolas Raoul
źródło
1
cd {local_dir}
lftp {server}
cd {remote_dir}
mput {local_dir}/*

To działało dla mnie, wiele innych prób zawiodło. W lftp więcej informacji dostępnych jest poprzez:

help mput
austin
źródło
2
Prawdopodobnie lepiej byłoby użyć mirror -Rtutaj.
gauteh
@gauteh masz rację. najlepsza odpowiedź ^
austin
0

W końcu mam odpowiedź !!! Utwórz skrypt powłoki ftpmirror.sh

#!/bin/bash 
path = /local-dir-path
lftp -e "mirror -R $path /$path" -u username,password ftp-server-ip
  • Ścieżka = lokalny katalog, który chcemy skopiować na serwer ftp
  • nazwa użytkownika = nazwa użytkownika serwera ftp
  • hasło = hasło serwera ftp
  • ftp-server-ip = adres IP serwera ftp

Jeśli pakiet lftp nie jest zainstalowany, zainstaluj go używając yum.

Kiran Zinjurde
źródło