Come caricare ricorsivamente una directory su un server FTP usando semplicemente ftp o lftp?


19

Sto scrivendo uno script di shell Linux per copiare una directory locale su un server remoto (rimuovendo tutti i file esistenti).

Server locale: ftp e lftpcomandi disponibili, no ncftp o strumenti grafici.

Server remoto: accessibile solo via FTP. Nessun rsync né SSH né FXP.

Sto pensando di elencare i file locali e remoti per generare uno script lftp e quindi eseguirlo. C'è un modo migliore?

Nota: caricare solo file modificati sarebbe un vantaggio, ma non è obbligatorio.


ncftp è totalmente fuori discussione? Sarebbe un imho più semplice. (e so che lo farà come lo uso così)
Sirex,

Sirex: Preferirei farlo con strumenti forniti di default su RedHat. Se lftp risulta inutilizzabile, aggiungerò un requisito per gli utenti di installare ncftp.
Nicolas Raoul,

La sintassi di wput(un ftp-uploader simile a wget):wput dir/ ftp://user:pass@host/dir
Kenorb

Risposte:


39

lftp dovrebbe essere in grado di farlo in un solo passaggio, in particolare con lftp mirror:

EDIT: la sintassi del comando lftp è confusa, l'invocazione originale che ho pubblicato non funziona. Provalo in questo modo:

lftp -e "mirror -R {dir locale} {dir remoto}" -u {nome utente}, {password} {host}

notare le virgolette attorno agli argomenti per l' -einterruttore.


1
+1 per avermi informato che la modalità mirror di lftp funziona anche se FXP non è disponibile (ero convinto del contrario dopo aver letto tutorials.papamike.ca/pub/lftp.html che dice "entrambi i server devono supportare questo protocollo affinché l'operazione abbia successo "). Tuttavia, questo comando particolare non riesce sul mio server Ubuntu: lftp: mirror: nome o servizio non noto, comando sconosciuto `-R '.
Nicolas Raoul,

Ho riformulato la mia risposta con una migliore invocazione di lftp, spero che ciò aiuti.
Phil Hollenback, l'

Finalmente ho funzionato! Sembra che sia necessario passare da remoto a locale affinché funzioni. Si prega di aggiornare e accetterò questa risposta. Ecco una riga di comando che funziona: lftp -e "mirror -R / tmp / mylocalfiles / var / www" -u remoteuser, remotepassword remoteserver
Nicolas Raoul

Penso di aver visto nei documenti lftp che dovevi cambiare le directory locali e remote quando usavi -R ma devo aver dimenticato. Aggiornato la mia risposta.
Phil Hollenback,

Come fallisce? Hai provato a eseguire 'lftp -vvv' per un output più dettagliato per determinare cosa sta cercando di fare?
Phil Hollenback, il

1

Basato sull'idea di Phil di usare la modalità mirror di lftp, questo comando fa il trucco:

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

Uno svantaggio è che richiede che il server locale abbia un server FTP in esecuzione.


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

Questo ha funzionato per me, molti altri tentativi fallivano. Una volta in lftp, ulteriori informazioni disponibili tramite:

help mput

2
Probabilmente sarebbe meglio usare mirror -Rqui.
gauteh

@gauteh hai ragione. miglior risposta ^
austin

0

Finalmente ho ottenuto la risposta !!! Crea lo script shell ftpmirror.sh

#!/bin/bash 
path = /local-dir-path
lftp -e "mirror -R $path /$path" -u username,password ftp-server-ip
  • Path = directory locale che vogliamo copiare nel server ftp
  • username = nome utente del server ftp
  • password = password del server ftp
  • ftp-server-ip = indirizzo IP del server ftp

Se il pacchetto lftp non è installato, installarlo usando yum.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.