sviluppo-web-qa.it

Come usare rsync su FTP

Qualsiasi unix:

Ho la seguente linea cmd che funziona bene.

rsync -avr -e ssh /home/dir [email protected]:/home/

Ma devo impostarlo ora per sincronizzare un server remoto che ha solo un server FTP. Come posso procedere?

Ho guardato l'aiuto di rsync ma mi sono perso rapidamente (non faccio queste cose molto spesso).

191
bumperbox

Non rsync non può farlo per te, è un protocollo a sé stante e non funziona su FTP.

Tuttavia, potresti voler provare csync . IIRC fornisce un comportamento simile a rsync su HTTP. Non posso commentare se funziona tramite FTP, dovrete provarlo.

80
serverhorror

rsync non funzionerà per te per i motivi menzionati da altri. Tuttavia, lftp e ncftp entrambi hanno modalità "mirror" che probabilmente soddisferanno le tue esigenze.

Lo uso per inviare materiale dalla mia directory locale a un host web ftp o sftp:

lftp -c "set ftp:list-options -a;
open ftp://user:[email protected]; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"
163
easel

Come scritto da cavalletto , lftp è un buon strumento.

Ti suggerisco di parametrizzare lo script e di utilizzare il

exclude-glob

opzioni, che esclude i nomi di file usando la funzione glob (* ,? ..) di Shell:

#!/bin/bash    
Host="your.ftp.Host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:[email protected]$Host"
LCD="/path/of/your/local/dir"
RCD="/path/of/your/remote/dir"
#DELETE="--delete"
lftp -c "set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
cd $RCD;
mirror --reverse \
       $DELETE \
       --verbose \
       --exclude-glob a-dir-to-exclude/ \
       --exclude-glob a-file-to-exclude \
       --exclude-glob a-file-group-to-exclude* \
       --exclude-glob other-files-to-exclude"

Avviso: assicurati che la directory di destinazione esista, altrimenti il ​​comando cd fallirà, quindi l'operazione inclusa l'eliminazione di alberi di i file avranno luogo nella directory errata (root)!

Ho aggiornato lo script in modo che l'opzione --delete Sia disabilitata da defaut, abilitala decommentando il DELETE= command.

123
GabrieleV

A seconda di ciò che stai effettivamente cercando di fare, un altro approccio completamente diverso potrebbe essere utilizzare curlftps per montare una cartella ftp, e quindi forse rsync le due cartelle "locali".

L'installazione è diversa a seconda della distribuzione, quindi non posso generalizzare su questo, ma è necessario installare Fuse e curlftpfs (prolly Debian ha già Fuse install di default), poi:

  1. Sudo apt-get install curlftpfs

  2. Assicurati che il modulo Fuse sia caricato (modprobe Fuse)

  3. Sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other

Nota che non c'è spazio dopo l'ultima virgola (non è un refuso!). Se sei soddisfatto o non vuoi farlo ogni volta, puoi aggiungerlo al tuo fstab (di solito in /etc/fstab):

curlftpfs#user:[email protected] /path/to/ftp/folder/ Fuse auto,user,uid=1000,allow_other 0 0

In tal caso, è necessario assicurarsi che il modulo Fuse sia stato caricato prima.

Tieni presente, però, di due cose:

  • Che lo sviluppatore ha abbandonato il progetto uno o due anni fa, quindi non so quanto sia utilizzabile/stabile per il momento.
  • Se la password contiene un carattere strano curlftpfs potrebbe non riuscire (forse puoi fare qualcosa con il .netrc).

C'è weex ...

Weex è un'utilità progettata per automatizzare l'attività di gestione remota di una pagina Web o di un altro archivio FTP. Sincronizzerà un set di file locali su un server remoto eseguendo upload ed eliminazioni remote come richiesto.

16
Johan

rsync non funziona su ftp. Sul lato remoto ha bisogno del demone rsync o di una Shell da cui può chiamare rsync. Ftp generalmente ti permette di chiamare alcuni comandi e rsync non è uno di questi. Esistono altri strumenti pensati per automatizzare le attività ftp come "lftp".

9
Ian Kelling

Sembra una scelta valida e gratuita: https://savannah.gnu.org/projects/ftpsync/

8
pauska

Per quello che sembra che stai cercando di fare, puoi anche usare wget.

wget -m ftp: // nome utente: [email protected]

7
Aaron

Puoi usare curlftpfs per montare ftp e usare rsync dopo http://linux.die.net/man/1/curlftpfs

5
shaftmx

Sto usando GVFS/FTP. Monta i miei server FTP remoti con gigolo. Come sono visti come directory locali, quasi tutto funziona su file locali funziona. rsync è progettato per calcolare gli hash di file in remoto per confrontare i file senza trasferirli, ma farlo con i file virtuali trasferisce comunque i file. unison e freefilesync normalmente funzionano bene ma ho riscontrato un problema quando vogliono rinominare un file caricato, nessun problema con il download. Questo potrebbe essere un problema con gvfs 1.6.1.

4
Papou

La soluzione di Jonas S può essere utile a seconda delle circostanze, ad esempio se si dispone di un'alta velocità di download e di un caricamento lento, il controllo dei file sul server potrebbe essere relativamente più veloce del caricamento inutile di file.

Probabilmente vuoi usare CurlFTPFS, però: http://packages.ubuntu.com/search?suite=default&section=all&Arch=any&searchon=names&keywords=curlftpfs

Sebbene, in generale, è meglio utilizzare un normale client FTP del tutto invece di rsync.

3
user25738

Se vuoi automatizzare l'attività, allora usa lftp poiché puoi creare uno script come alcune persone hanno pubblicato sopra, puoi scriverlo tutto molto facilmente a tuo piacimento, se stai cercando una soluzione unica (cioè devi scaricare un intero sito Web via ftp/spostalo su un altro server) usa ncftp, è semplice, installalo se non è già installato:

apt-get install ncftp

o

yum install ncftp

(scusate le distribuzioni non debian/basate su Red Hat ..)

una volta installato, apri ncftp nel terminale quindi digita:

open -u ftpusername ftp.thedomain.com

Ti chiederà la password, inseriscila e quindi:

get -R /home/remotewebsite/public_html/ /home/localwebsite/public_html/

Farà il resto del lavoro per te ... buona fortuna

2
desdecode

Non credo che sarai in grado di farlo, il server a cui stai provando Rsync avrà solo un server FTP in esecuzione, non capirà i comandi che Rsync lo sta inviando.

Se il motivo per cui vuoi farlo è che hai accesso solo alla porta 21, ma hai il controllo del server, puoi cambiare la porta su cui Rsync è in ascolto, sul server, ma questo è ovviamente utile solo se non lo fai vuoi usare FTP su quella porta.

2
Sam Cogan

rclone è un software piacevole che esegue la sincronizzazione delle directory su ftp e molti altri protocolli tra cui i provider di cloud storage (Amazon S3, Dropbox, Google Drive). Può sincronizzare da/verso qualsiasi combinazione di archiviazione locale o remota.

Per configurare un ftp remoto segui queste istruzioni .

Una volta fatto, l'operazione di sincronizzazione è:

rclone sync /home/dir FTP_REMOTE:/home --progress 
1
bernie

L'uso di "sitecopy" o "mirror" può farti risparmiare molta larghezza di banda.

Entrambi gestiscono un aggiornamento incrementale efficiente.

1
Kan-Ru Chen

Ho creato il proprio strumento da riga di comando per questo: ftpsync

Perché? Poiché è semplice ed elegante, altri strumenti richiedono molte dipendenze, a volte la compilazione, a volte non funziona (ad esempio lftp su MacOs High Sierra). Ftpsync è scritto in puro Python, non richiede librerie di terze parti ed è piccolo, puoi semplicemente includere il file nel tuo progetto.

Utilizzo: cd nella directory del progetto e digitare:

ftpsync user:[email protected]/remote/dir --delete

--delete indica l'eliminazione di file remoti che non esistono localmente.

Se non vuoi sincronizzare ma esegui il comando raw ftp usa:

ftpsync -c '...'

È utile per alcune semplici operazioni come inviare file e rinominarlo:

ftpsync -c 'PASV; TYPE I; STOR some_file.ext; RNFR some_file.ext; RNTO some_file_renamed.ext'
0
superdario128

C'è anche wput:

wput --timestamping --reupload --dont-continue source-files ftp://target.Host/dir

Il nome utente e la password vengono letti da ~/.netrc. Altrimenti, se non sei particolarmente interessato alla sicurezza, puoi fornirli come ftp: // username: [email protected] .

0
Ole Wolf