Python Rsync

Abid Ullah 10 Oktober 2023
Python Rsync

In einer Welt der sich ständig ändernden Technologien werden wir immer noch und möglicherweise immer wieder auf Fälle stoßen, in denen wir Dateien übertragen oder austauschen müssen. Rsync ist ein Linux-basiertes Tool, das uns helfen kann, die Übertragungsdetails festzulegen.

Dieser Artikel befasst sich mit rsync und wie wir es aus einem Python-Skript verwenden können.

Python Rsync

Wie oben erwähnt, ist rsync ein leistungsstarkes Tool, das uns hilft, die Übertragungsdetails festzulegen. Das bedeutet, dass wir bestimmen können, welche Dateien von einer Übertragung ausgeschlossen werden sollen und welche Art von Shell verwendet werden soll.

Rsync wird normalerweise für Übertragungen mit hoher Übertragungskomplexität oder für Dateien verwendet, die in großen Mengen übertragen werden. Es ist auch möglich, Backups, die von rsync erstellt wurden, mit Hilfe von cron zu automatisieren.

den rsync-Befehl unter Linux

So sieht ein generisches rsync-Befehlsformat aus.

rsync [option] [origin] [destination]

Dies ist ein einfacher Befehl, wenn man mit Linux vertraut ist, aber wir werden ihn trotzdem aufschlüsseln. Jeder Befehl beginnt mit dem Schlüsselwort rsync.

Es folgt eine Option, aus der wir eine große Auswahl haben. Jede Option gibt die Art des rsync an, das wir auszuführen hoffen.

Der Ursprung und das Ziel sind hier, wohin wir unsere Dateien übertragen möchten (Ziel) und von wo (Ursprung). Das bedeutet, dass wir vorsichtig sein müssen, was wir synchronisieren und ob wir von einem lokalen oder einem entfernten Computer synchronisieren, da rsync oft die Ursache dafür ist, dass Dateien ohne große Vorwarnung neu geschrieben werden.

Hier ist eine Liste grundlegender und gebräuchlicher Optionen für rsync.

  1. -a – Diese Option hilft beim rekursiven Kopieren von Dateien und hilft, den Besitz der Dateien auch nach dem Kopieren beizubehalten.
  2. -dry-run – Mit dieser Option können wir einen Versuch für den Befehl ausführen, um die Änderungen zu beobachten, die sich ergeben würden, wenn der Befehl ausgeführt würde. Diese Option bewirkt keine tatsächlichen Änderungen.
  3. -delete – Diese Option hilft, überflüssige Dateien vom Zielcomputer/-verzeichnis zu löschen.
  4. -e – Diese Option hilft, rsync über die zu verwendende Shell zu informieren.
  5. -exclude="*.filetype" – Diese Option hilft, alle Dateien eines bestimmten Dateityps von einer Übertragung auszuschließen. Im obigen Befehl ersetzen wir Dateityp durch den tatsächlichen Dateityp. Zum Beispiel -exclude="*.docx".
  6. -h – Diese Option hilft, die Hilfe für rsync zu starten.
  7. -progress – Diese Option hilft, den Fortschritt der Übertragung anzuzeigen, während der Befehl ausgeführt wird.
  8. -q – Diese Option führt alle Befehle im Hintergrund oder leise aus.
  9. -v – Diese Option führt die Übertragung durch, damit der Benutzer alle ausgeführten Prozesse lesen kann.
  10. -z – Diese Option hilft, synchronisierte Daten zu komprimieren.

Verwenden Sie Rsync aus einem Python-Skript

Es gibt jetzt zwei Möglichkeiten, Rsync in Python zu verwenden.

  1. Rufen Sie subprocess auf und geben Sie den Befehl rsync an.

    import subprocess
    
    subprocess.call(["rsync", "[option]", "[origin]", "[destination]"])
    
  2. Verwenden Sie die pyrsync-Bibliothek

    Das ist richtig, und Python bietet jetzt seine Bibliothek für Rsync an. Diese Bibliothek ist kein Wrapper für Rsync, sondern enthält eine vollwertige Funktionalität von Rsync selbst.

    Wir können diese Bibliothek über pip installieren.

    pip install pyrsync
    

rsync erfordert zunächst die Verwendung von MD5-Hash, was Entwickler im Vergleich zur Verwendung von SHA256, das vom modernisierten pyrsync verwendet wird, oft als veraltet empfinden. SHA256 erfüllt die Standardanforderungen für die Sicherheit von Verifikationsprozessen.

Während pyrsync seit seiner Einführung keine größeren Releases hatte, kann beobachtet werden, dass es ein enormes Potenzial in der Welt der Entwicklung hat, und derzeit ist diese Bibliothek nicht bekannt, dass sie irgendwelche Fehler oder Schwachstellen aufweist.

Da die Bibliothek nicht verfügbar ist, muss sie aus verfügbarem Quellcode erstellt und installiert werden.

Pyrsync hat das Potenzial, uns Stunden und Stunden an Entwicklungszeit und Ressourcen zu sparen, da wir die Funktionalität, die es bietet, nicht von Grund auf neu erstellen müssen.

Sein leicht lesbarer Code und die einfache Installationsanleitung von Pypi machen es sehr einfach, es in unsere Skripte einzubinden.

Wir müssen diesen Befehl ausführen, wenn auf dem System bereits Setup-Tools installiert sind.

$ sudo python setup.py install

Selbst wenn das System keine Setup-Tools hat, erkennt das Skript setup.py das Fehlen und stellt die Standardeinstellung so ein, dass stattdessen Pythons eingebaute distutils verwendet werden.

Ein beispielhafter Befehlsablauf für dieses Modul sieht wie folgt aus:

# In the system with the file that needs patching
>>> import pyrsync2
>>> unpatched = open("unpatched.file", "rb")
>>> hashes = pyrsync2.blockchecksums(unpatched)
# In the remote machine receiving hashes
>>> import pyrsync2
>>> patchedfile = open("patched.file", "rb")
>>> delta = pyrsync2.rsyncdelta(patchedfile, hashes)
# In the origin machine with the unpatched file after receiving delta
>>> unpatched.seek(0)
>>> save_to = open("locally-patched.file", "wb")
>>> pyrsync2.patchstream(unpatched, save_to, delta)

Ein wesentlicher Punkt, der hier zu beachten ist, ist, dass diese Bibliothek derzeit nur Unterstützung für Python 3 bietet.

Wir hoffen, dass Sie diesen Artikel hilfreich finden, um zu verstehen, wie man rsync in Python verwendet.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn