Frage Wie verwende ich rsync über FTP?


Irgendein Unix:

Ich habe die folgende Befehlszeile, die gut funktioniert.

rsync -avr -e ssh /home/dir user@example.com:/home/

Aber ich muss es jetzt einrichten, rsync zu einem Remote-Server, der nur einen FTP-Server hat. Wie gehe ich da vor?

Ich habe mir die rsync-Hilfe angeschaut, bin aber schnell verloren gegangen (das mache ich nicht oft).


175
2018-06-12 09:51


Ursprung


Dies ist vergleichbar mit der Frage, wie HTTP über IRC oder FTP über SMTP verwendet werden soll ... - Juliano
Vielleicht können Sie einige Ihrer Argumentation dafür erklären, dass wir dies tun wollen, dann können wir Ihnen helfen, eine praktikable Lösung zu finden. - James
Im Wesentlichen habe ich versucht, ein Backup von einem Shared-Hosting-Server zu automatisieren und nicht verstanden, wie rsync funktioniert. Ich bin jetzt zu einem vps umgezogen und habe nicht mehr die Einschränkung von ftp - bumperbox
Duplizität ist dein Gott: scie.nti.st/2013/4/13/ ... - user956584
Ob Einsatz ist, was dir in den Sinn kommt und dir nichts ausmacht NodeJS, schau dir das an Bereitstellen, faul und funktioniert gut mit Git - Frank Nocke


Antworten:


Du nicht. rsync kann das nicht für Sie tun, es ist ein eigenes Protokoll und funktioniert nicht über FTP.

Sie können es jedoch versuchen CSync. IIRC es bietet rsync-ähnliches Verhalten über HTTP. Ich kann nicht sagen, ob es über FTP funktioniert, Sie müssen es versuchen.


76
2018-06-12 10:00



Mit Blick auf die csync Webseite, es unterstützt sftp, aber es gibt keine Erwähnung von Unterstützung für plain ftp. - Keith Thompson


rsync wird aus den Gründen, die andere erwähnt haben, nicht für dich arbeiten. Jedoch, lftp und ncftp Beide haben "Spiegel" -Modi, die wahrscheinlich Ihre Bedürfnisse erfüllen.

Ich benutze dies um Inhalte aus meinem lokalen Verzeichnis auf einen FTP- oder SFTP-Web-Host zu übertragen:

lftp -c "set ftp:list-options -a;
open ftp://user:password@your.ftp.com; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"

156
2018-06-12 14:58



Lftp ist sehr nett. Eine andere, die ich gerade herausgefunden habe, ist wput Das hat eingebaute Bandbreitenbegrenzung. - karmakaze


Wie geschrieben von Staffelei, lftp ist ein gutes Werkzeug.

Ich empfehle Ihnen, das Skript zu parametrisieren, und nutzen Sie die

exclude-glob

Optionen, die Dateinamen mit der Glob-Funktion (*,? ..) Ihrer Shell ausschließen:

#!/bin/bash    
HOST="your.ftp.host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:$PASS@$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"

Warnung: vergewissere dich, dass das Zielverzeichnis existiert, sonst wird der cd-Befehl fehlschlagen, also operation einschließlich Löschen von Bäumen von Dateien  wird bei falschem Verzeichnis (root) stattfinden!

Ich habe das Skript so aktualisiert --delete Option wird durch defaut deaktiviert, aktivieren Sie sie durch Auskommentieren der DELETE= command.


118
2018-01-26 11:58



Hat mir einen tollen Haufen geholfen. Aber ich musste den "set ftp: list-options -a;" was wo Sachen versaut hat. - mat
Gibt es so etwas, das dasselbe über SFTP (FTPS?) Macht? - trusktr
Ich würde das schon mal machen cd $RCD, um zu verhindern, dass a-script-with-a-typo versehentlich Dateien aus dem falschen Verzeichnis löscht: set cmd:fail-exit yes. (Es scheint lftp bemerkt nicht, dass es tatsächlich beendet wurde, bis Sie den nächsten Befehl ausgeben.) - Und vorher cd $LCD Ich würde das tun (in der lokalen Shell, also oben auf dem Skript): set -eu. - KajMagnus
Als ich das Skript zum ersten Mal ausführte, hatte ich das Remote-Verzeichnis noch nicht erstellt, so dass das Skript auf CD in diesem nicht vorhandenen Verzeichnis fehlschlug. Dann begann das Skript zu mirror, und somit --delete: d Dateien aus dem falschen Verzeichnis. (Aber ich kopierte sie wieder zurück, also war es in diesem Fall egal. Vielleicht ist es wichtig für jemand anderen.) - KajMagnus
Sowie @KajMagnus 'Ratschlag über die Verwendung von' set -eu 'und' cd $ LCD 'folgt, fügen Sie' mkdir -p $ LCD 'vor' cd $ LCD 'hinzu - so können Sie sicher sein, dass das Verzeichnis existiert und Sie' re drin. - Paul Gear


Abhängig von dem, was Sie tatsächlich versuchen, könnte ein anderer völlig anderer Ansatz verwendet werden curlftps um einen FTP-Ordner zu mounten, und dann vielleicht rsync die zwei "lokalen" Ordner.

Die Installation unterscheidet sich je nach Distribution, daher kann ich nicht verallgemeinern, aber Sie müssen installierenfuse und curlftpfs (prolly hat bereits Debian fuse standardmäßig installieren), dann:

  1. sudo apt-get install curlftpfs

  2. Stellen Sie sicher, dass fuse Modul ist geladen (modprobe fuse)

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

Beachten Sie, dass hinter dem letzten Komma kein Platz mehr ist (kein Tippfehler!). Wenn Sie damit zufrieden sind oder dies nicht jedes Mal machen möchten, können Sie es Ihrer fstab hinzufügen (normalerweise in /etc/fstab):

curlftpfs#user:password@ftp.yourserver.com /path/to/ftp/folder/ fuse auto,user,uid=1000,allow_other 0 0

In diesem Fall müssen Sie sicherstellen, dass das Sicherungsmodul zuvor geladen wurde.

Beraten Sie jedoch von zwei Dingen:

  • Dass der Entwickler das Projekt vor ein oder zwei Jahren eingestellt hat, weiß ich vorerst nicht, wie brauchbar / stabil es ist.
  • Wenn das Passwort ein seltsames Zeichen enthält curlftpfs könnte scheitern (vielleicht können Sie etwas mit dem tun .netrc).

23
2017-12-11 12:39



FTP Fuse und rsync kommen der Frage am nächsten, sind aber offensichtlich verrückt nach allem außer einem kleinen Satz kleiner Dateien. - Steve-o
Warum wäre es verrückt? Standardmäßig rsync stat () s, es vergleicht nicht den Inhalt. Das kann von ls -l mit einem FTP-Client erledigt werden. - ptman
Ich versuchte es tatsächlich (über rsnapshot) und es funktionierte nicht, jede Datei zurückgegeben und Fehler, zeigt, dass rsync konnte keine Verknüpfung erstellen. Mit lftp in Verbindung mit rsnapshot gelang der Trick - Konstantin Pereiaslov
Perfekt auf 14.04 LTS; Ein zusätzlicher Tipp: Wenn Sie Ihre FTP-Site aushängen möchten, verwenden Sie einfach umount DIR woher DIR war dein /path/to/ftp/folder über. - Joe
2017, und das funktioniert immer noch! Ehrlich gesagt der einfachste Weg, um Dateien von einer FTP-Site enmasse zu kopieren. Mounten Sie lokal, dann rsync, als wäre es lokal - td512


Es gibt weex...

Weex ist ein Dienstprogramm entwickelt, um   automatisieren Sie die Aufgabe von entfernt   Pflege einer Webseite oder eines anderen FTP   Archiv. Es wird eine Reihe von synchronisieren   lokale Dateien auf einem Remote-Server durch   Durchführen von Uploads und Remote-Löschungen   nach Bedarf.


15
2017-08-17 14:38



Funktioniert wie Charme! Du führst es so: $ weex yourFTPconfigName Hier ist Handbuch linuxcertif.com/man/1/weex - sobi3ch


rsync funktioniert nicht über ftp. Auf der Remote-Seite benötigt es entweder den rsync-Daemon oder eine Shell, von der aus er rsync aufrufen kann. Ftp erlaubt Ihnen im Allgemeinen einige Befehle aufzurufen und rsync gehört nicht dazu. Es gibt andere Tools, die für die Automatisierung von FTP-Aufgaben wie "lftp" gedacht sind.


9
2018-06-12 10:03





Dies scheint eine gute und freie Passform zu sein: https://savannah.gnu.org/projects/ftpsync/


8
2018-06-12 15:02



Angesichts der dampfenden Haufen von Berühren Sie nicht mit einer Zehn-Fuß-Stange SourceForge ist in letzter Zeit geworden, vielleicht solltest du den Link zum Projektwebseite. - HopelessN00b


Für das, was es zu tun scheint, könnten Sie auch wget verwenden.

wget -m ftp: // Benutzername: Passwort@domain.com


6
2018-02-25 18:12



Das wird nur einen Spiegel der Website machen. Sie können damit Ihre Änderungen nicht hochladen. - David V.


Sie können curlftpfs verwenden, um ftp zu mounten und rsync zu verwenden http://linux.die.net/man/1/curftpfs


5
2017-12-09 21:47



Willkommen bei ServerFault! Dies mag ein guter Anfang sein, aber einige technische Details darüber, warum dies ein besserer Ansatz ist, und möglicherweise ein Mock-up darüber, wie es zu tun ist, könnten vernünftig sein. - Scott Pack


Ich benutze GVFS / FTP. Ich montiere meine Remote-FTP-Server mit Gigolo. Da sie als lokale Verzeichnisse angesehen werden, funktioniert fast alles, was an lokalen Dateien arbeitet. rsync wurde entwickelt, um Datei-Hashes remote zu berechnen, um Dateien zu vergleichen, ohne sie zu übertragen, aber das mit virtuellen Dateien zu tun, überträgt die Dateien trotzdem. Unison und Freefilesync funktionieren normalerweise gut, aber ich habe ein Problem, wenn sie eine Datei umbenennen wollen, die du hochgeladen hast, kein Problem beim Herunterladen. Dies könnte ein Problem mit gvfs 1.6.1 sein.


4
2017-11-29 17:55





Die Lösung von Jonas S kann je nach den Umständen nützlich sein. Wenn Sie beispielsweise eine hohe Download-Geschwindigkeit und einen langsamen Upload haben, ist die Überprüfung der Dateien auf dem Server möglicherweise schneller als das unnötige Hochladen von Dateien.

Sie möchten jedoch wahrscheinlich CurlFTPFS verwenden: http://packages.ubuntu.com/search?suite=default&section=all&arch=any&searchon=names&keywords=curlftpfs

Im Allgemeinen ist es jedoch besser, einen regulären FTP-Client anstelle von rsync zu verwenden.


3
2017-11-11 10:06