
Ich möchte eine Datei mit gzip komprimieren und sie dann sofort per rsync mit einem anderen Server synchronisieren, damit die erstellte gzip-Datei nicht auf den lokalen Server geschrieben wird. Ich dachte darüber nach, so etwas zu tun … aber das funktioniert offensichtlich nicht.
gzip-Datei | rsync -auv another_server
Hat jemand eine Idee dazu? Oder ist das überhaupt möglich?
Antwort1
Normalerweise würde ich hierzu gzip und ssh wie folgt verwenden:
gzip -c Datei | ssh[email geschützt]"cat > ziel.gz"
Dadurch wird die Zip-Ausgabe über SSH direkt in die Datei „destination.gz“ auf dem Remote-Host gesendet. Wenn Sie dies manuell tun, geben Sie einfach Ihr SSH-Passwort ein. Wenn Sie es automatisch tun möchten, müssen Sie SSH-Schlüssel einrichten, etwa so:
Antwort2
Nehmen Sie das nicht persönlich, aber aus Ihrer Frage und Ihren Kommentaren scheint hervorzugehen, dass Sie nicht verstehen, was rsync eigentlich istfür. Es ist nicht für das Verschieben von Dateien von einem Ort zum anderen gedacht – es ist fürSynchronisierenDateien zwischen zwei Orten. Wenn Sie keine Kopie auf dem lokalen Computer behalten möchten, führen Sie keine Synchronisierung durch und rsync ist nicht das gewünschte Tool.
Sie versuchen, eine Datei zu übertragen. Dazu können Sie sie auf die Festplatte legen und ssh, ftp, sftp, ftps usw. verwenden, oder Sie können sie wie von Glenn vorgeschlagen durch ssh leiten, was die richtige Antwort und der einzig richtige Weg ist, um das zu erreichen, was Sie wollen. Wenn Sie sich Sorgen um die Ressourcenauslastung machen (und bei Verbindungen mit hoher Bandbreite kann dies einen Unterschied machen), ändern Sie die Chiffren:
gzip -c somefile | ssh -c blowfish user@host 'cat > someotherfile'
Wenn Sie versuchen, etwas zu tun (z. B. eine Pipe an rsync weiterzuleiten) und es nicht funktioniert, ist es möglich, dass Sie es falsch machen oder dass Sie versuchen, das Falsche zu tun. Es ist eine Frage des richtigen Werkzeugs für die Aufgabe, und es ist wichtig, nicht auszuschließen, dass es für das, was Sie versuchen, ein geeignetes Werkzeug gibt.
Wenn Sie den Zweck der verschiedenen Tools verstehen und im Auge behalten, die in einer UNIX-Umgebung verfügbar sind, können Sie diese Umgebung effektiver nutzen und bearbeiten. Viele Tools weisen geringfügige Unterschiede oder Überschneidungen in der Funktionalität auf. Wenn Sie jedoch nicht alle Tools beachten, entgehen Ihnen viele der besten Möglichkeiten zum Erledigen von Aufgaben.
Antwort3
Rsync bietet in diesem Fall wahrscheinlich keine Vorteile, da der gesendete Inhalt eindeutig ist.
Das Komprimieren einer Datei und das Senden der Ausgabe an STDOUT ist recht einfach:
gzip -c file > another-file
Wenn es Ihnen um Geschwindigkeit geht und Sie die Kontrolle über beide Enden haben, hat Netcat fast keinen Overhead.
Richten Sie die Zielmaschine so ein, dass sie auf Port 1234 lauscht.
user@bar$ nc -l -p 1234 > file.gz
Senden Sie „file.gz“ an die Maschine bar:1234
user@foo$ gzip -c file | nc bar 1234
Antwort4
Die Kombination von gzip und rsync funktioniert nicht.
Wenn Sie die unkomprimierte Datei senden, sendet rsync nur die Bits, die sich geändert haben. Wenn Sie jedoch eine Datei mit gzip komprimieren, wird die resultierende Datei jedes Mal deutlich anders sein. Die Weiterleitung an rsync würde bestenfalls ein ähnliches Ergebnis wie ssh erzielen und könnte sogar noch schlimmer sein.
Der Grund, warum eine komprimierte Datei jedes Mal anders ist, liegt darin, dass die Daten vor der Komprimierung profiliert werden. Das bedeutet, dass selbst eine kleine Änderung in der Datei eine Änderung im Profil bedeuten kann, die sich auf jedes komprimierte Byte auswirkt.