Beliebiges Unix:
Ich habe die folgende cmd-Zeile, die gut funktioniert.
rsync -avr -e ssh /home/dir [email protected]:/home/
Aber ich muss es jetzt einrichten, um es mit einem Remote-Server zu synchronisieren, auf dem sich nur ein FTP-Server befindet. Wie gehe ich vor?
Ich habe mir die rsync-Hilfe angesehen, ging aber schnell verloren (ich mache das nicht sehr oft).
Antworten:
Das tust du nicht. rsync kann das nicht für Sie tun, es ist ein eigenes Protokoll und funktioniert nicht über FTP.
Möglicherweise möchten Sie jedoch csync ausprobieren . IIRC bietet rsync-ähnliches Verhalten über HTTP. Ich kann nicht beurteilen, ob es über FTP funktioniert, Sie müssen es versuchen.
quelle
rsync funktioniert aus den von anderen genannten Gründen nicht für Sie. Allerdings lftp und ncftp beide haben „Spiegel“ Modi , die Ihren Bedürfnissen wohl treffen.
Ich verwende dies, um Daten aus meinem lokalen Verzeichnis auf einen FTP- oder SFTP-Webhost zu übertragen:
quelle
wput
die, die eine eingebaute Bandbreitenbegrenzung hat.Wie von Staffelei geschrieben ,
lftp
ist ein gutes Werkzeug.Ich empfehle Ihnen, das Skript zu parametrisieren und das zu verwenden
Optionen, die Dateinamen mit der Glob-Funktion (* ,? ..) Ihrer Shell ausschließen:
Warnung: Vergewissern Sie sich, dass das Zielverzeichnis vorhanden ist. Andernfalls schlägt der Befehl cd fehl, sodass der Vorgang einschließlich des Löschens von Dateibäumen im falschen Verzeichnis (Stammverzeichnis) ausgeführt wird.
Ich habe das Skript so aktualisiert, dass die
--delete
Option standardmäßig deaktiviert ist. Aktivieren Sie sie, indem Sie das Kommentarzeichen entfernenDELETE= command
.quelle
cd $RCD
, um so ein-Skript-mit-einem-Tippfehler zu verhindern , dass versehentlich Dateien aus dem falschen Verzeichnis zu löschen:set cmd:fail-exit yes
. (Es scheint ,lftp
bemerkt nicht , dass es tatsächlich verlassen hat, bis Sie den nächsten Befehl.) - Und bevorcd $LCD
ich das tun würde (in dem lokal Shell, das heißt, an der Spitze des Scrip):set -eu
.mirror
und damit--delete
: d Dateien aus dem falschen Verzeichnis. (Aber ich habe sie wieder zurückkopiert, also war es in diesem Fall egal. Vielleicht ist es für jemand anderenJe nachdem, was Sie tatsächlich versuchen, könnte ein völlig anderer Ansatz
curlftps
zum Mounten eines FTP-Ordners und dann möglicherweisersync
der beiden "lokalen" Ordner verwendet werden.Die Installation ist abhängig von Ihrer Distribution unterschiedlich, daher kann ich das nicht verallgemeinern, aber Sie müssen installieren
fuse
undcurlftpfs
(wahrscheinlich hat Debian bereitsfuse
eine Standardinstallation):sudo apt-get install curlftpfs
Stellen Sie sicher, dass das
fuse
Modul geladen ist (modprobe fuse
)sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other
Beachten Sie, dass nach dem letzten Komma kein Leerzeichen steht (kein Tippfehler!). Wenn Sie damit zufrieden sind oder dies nicht jedes Mal tun möchten, können Sie es zu Ihrer fstab hinzufügen (normalerweise in
/etc/fstab
):In diesem Fall müssen Sie vorher sicherstellen, dass das Sicherungsmodul geladen ist.
Seien Sie jedoch auf zwei Dinge hingewiesen:
curlftpfs
könnte das fehlschlagen (vielleicht kannst du etwas mit dem tun.netrc
).quelle
umount DIR
woDIR
war dein/path/to/ftp/folder
oben.Es ist weex ...
quelle
$ weex yourFTPconfigName
Hier ist das Handbuch linuxcertif.com/man/1/weexrsync funktioniert nicht über FTP. Auf der Remote-Seite benötigt es entweder den rsync-Daemon oder eine Shell, von der aus es rsync aufrufen kann. Mit FTP können Sie im Allgemeinen einige Befehle aufrufen, und rsync ist keiner von ihnen. Es gibt andere Tools zur Automatisierung von FTP-Aufgaben wie "lftp".
quelle
Dies scheint eine gute und freie Lösung zu sein: https://savannah.gnu.org/projects/ftpsync/
quelle
Für das, was Sie versuchen zu tun, könnten Sie auch wget verwenden.
wget -m ftp: // Benutzername: [email protected]
quelle
Sie können curlftpfs verwenden, um ftp einzuhängen und rsync nach http://linux.die.net/man/1/curlftpfs zu verwenden
quelle
Ich benutze GVFS / FTP. Ich mounte meine entfernten FTP-Server mit Gigolo. Da sie als lokale Verzeichnisse angesehen werden, funktioniert fast alles, was mit lokalen Dateien arbeitet. Mit rsync können Datei-Hashes aus der Ferne berechnet werden, um Dateien zu vergleichen, ohne sie zu übertragen. Wenn Sie dies jedoch mit virtuellen Dateien tun, werden die Dateien trotzdem übertragen. unison und freefilesync funktionieren normalerweise gut, aber ich habe ein Problem festgestellt, als sie eine hochgeladene Datei umbenennen möchten, kein Problem beim Herunterladen. Dies könnte ein Problem mit gvfs 1.6.1 sein.
quelle
Die Lösung von Jonas S kann abhängig von den Umständen nützlich sein. Wenn Sie beispielsweise eine hohe Download-Geschwindigkeit und einen langsamen Upload haben, kann die Überprüfung der Dateien auf dem Server relativ schneller sein als das unnötige Hochladen von Dateien.
Wahrscheinlich möchten Sie CurlFTPFS verwenden: http://packages.ubuntu.com/search?suite=default§ion=all&arch=any&searchon=names&keywords=curlftpfs
Im Allgemeinen ist es jedoch besser, einen regulären FTP-Client anstelle von rsync zu verwenden.
quelle
Ich glaube nicht, dass Sie dazu in der Lage sind. Auf dem Server, auf dem Sie Rsync ausführen möchten, wird nur ein FTP-Server ausgeführt. Die von Rsync gesendeten Befehle werden nicht verstanden.
Wenn Sie dies tun möchten, weil Sie nur Zugriff auf Port 21 haben, aber die Kontrolle über den Server haben, können Sie den Port ändern, den Rsync auf dem Server überwacht, aber dies ist natürlich nur sinnvoll, wenn Sie dies nicht tun möchte FTP auf diesem Port verwenden.
quelle
Wenn Sie die Aufgabe automatisieren möchten, verwenden Sie lftp, da Sie ein Skript wie oben beschrieben erstellen können. Wenn Sie nach einer einmaligen Lösung suchen (dh Sie müssen eine gesamte Website herunterladen), können Sie das Skript ganz einfach nach Ihren Wünschen erstellen via ftp / verschiebe es auf einen anderen Server) benutze ncftp, es ist einfach, installiere es wenn es noch nicht installiert ist:
oder
(Entschuldigung, nicht auf Debian / Red Hat basierende Distributionen.)
Einmal installiert, öffne ncftp im Terminal und tippe:
Es fragt Sie nach dem Passwort, gibt es ein und dann:
Es erledigt den Rest der Arbeit für Sie. Viel Glück
quelle
Durch die Verwendung von "SiteCopy" oder "Mirror" können Sie viel Bandbreite sparen.
Beide führen ein effizientes inkrementelles Update durch.
quelle
Es gibt auch wput:
Der Benutzername und das Passwort werden von ~ / .netrc gelesen. Andernfalls können Sie sie als ftp: // Benutzername: [email protected] angeben, wenn Sie nicht besonders auf Sicherheit bedacht sind .
quelle
Dafür habe ich ein eigenes Kommandozeilen-Tool erstellt: ftpsync
Warum? Weil es einfach und elegant ist, erfordern andere Tools eine Menge Abhängigkeiten, manchmal kompilieren, manchmal funktionieren sie nicht (z. B. LFTP auf MacOs High Sierra). Ftpsync ist in reinem Python geschrieben, benötigt keine Bibliotheken von Drittanbietern und ist klein. Sie können die Datei einfach in Ihr Projekt einbinden.
Verwendung: CD in Ihr Projektverzeichnis und geben Sie Folgendes ein:
--delete
steht für das Löschen von entfernten Dateien, die lokal nicht existieren.Wenn Sie nicht synchronisieren möchten, sondern nur einen rohen FTP-Befehl ausführen möchten, verwenden Sie:
Es ist nützlich für einige einfache Operationen wie das Senden und Umbenennen von Dateien:
quelle
rclone ist eine nette Software, die Verzeichnissynchronisierung über FTP und viele andere Protokolle, einschließlich Cloud-Speicheranbieter (Amazon S3, Dropbox, Google Drive), ausführt. Es kann mit einer beliebigen Kombination aus lokalem Speicher oder Remotespeicher synchronisiert werden.
ftp
Befolgen Sie diese Anweisungen, um eine Fernbedienung einzurichten .Sobald dies erledigt ist, ist der Synchronisierungsvorgang:
quelle
Installiere sftp und dann kannst du rsync benutzen.
Ich benutze den folgenden.
quelle