Dieser Blog ist mein persönlicher Blick auf die Welt der Programmierung – mit Themen zu #Webentwicklung und #Gamedev. Hier gibt's Wissen ohne Werbung – kompakt und in Textform. Für alle, die lieber lesen statt vorspulen.

rsync: Der bessere cp Befehl

Am 29. September 2019 / von Nick / in Übersetzungen / 2 Min. Lesedauer

Dieser Artikel stammt von Aalto Blogs . Ich habe ihn ins Deutsche übersetzt und ggf. um persönliche Erfahrungen erweitert.

rsync ist ein Kommandozeilen Programm, erhältlich für UNIX und OSX, das Dateien kopiert. Und das macht es ziemlich gut. So gut, dass man glatt auf die Idee kommen könnte, es als Alias für den normalen cp Befehl in der eigenen ~/.bashrc zu konfigurieren.

In diesem Artikel findet ihr ein paar nützliche Anwendungs-Beispiele. Wer selber noch gute Fälle oder Aliase kennt, kann sie gerne in die Kommentare tippen.

Generelle Verwendung

Generell verhält sich rsync fast wie cp. Allerdings hüpft es mit einer Menge Parameter in eure Kommandozeile (lies dir doch mal man rsync durch), die dir die alltägliche Arbeit erleichtern. Los geht’s mit dem ersten Beispiel:

rsync --progress -h

Mit diesen Parametern wird ein Fortschrittsbalken während des Vorgangs angezeigt (-h steht für „human readable“, also gut lesbar für den Benutzer). Damit kannst du also abschätzen, wie lange die Übertragung einer großen Datei dauern wird.

rsync -e ssh

Mit diesem Befehl wird rsync SSH nutzen, um Dateien auf verschiedene Rechner zu kopieren! Ein Beispiel:

rsync -e ssh files_to_copy user@remote.host.com:where/you/want/it/

oder, vorausgesetzt du hast dein SSH entsprechend konfiguriert, kürzer:

rsync -e ssh files_to_copy remote:where/you/want/it/

Natürlich funktioniert das auch anders herum. So werden Dateien von einem entfernten Rechner heruntergeladen:

rsync -e ssh remote:files_to_copy ./where/you/want/it/

Ein tolles Feature von rsync ist, dass es zwei identische Dateien erkennen kann. Es wird sie somit nicht erneut kopieren. Du kannst also ganz faul komplette Verzeichnisse kopieren und rsync pickt sich dann heraus, was noch kopiert werden muss.

Ein weiterer praktischer Parameter:

rsync --append huge_file.dat some/other/place/huge_file.dat

Mit dem --append Parameter erkennt rsync ob Teile einer großen Datei bereits vorher kopiert wurden und macht dort weiter, wo zuletzt aufgehört wurde. Das ist vor allem bei instabilen WLAN Verbindungen recht nützlich. Einfach den Download von unterwegs starten, Laptop zuklappen und Zuhause weiter laden.

Und zum Schluss noch ein ganz wichtiger Fall:

rsync -a -e ssh files_to_copy remote:where/you/want/it

Mit dem -a Parameter versucht rsync den korrekten Besitzer und die korrekte Gruppe für die entfernte Datei zu setzen. Gleiches gilt für die allgemeinen Dateiberechtigungen. Von diesem Parameter solltest du wohl in fast jedem Fall Gebrauch machen.

rsync als Alias

Nun wird sich vermutlich niemand die genannten Beispiele merken und ausschreiben (wollen). Also setz dir doch einfach einen Alias für die Fälle, die bei dir am häufigsten auftreten. Dazu musst du nur folgende Zeilen in deine ~/.bashrc eintragen:

alias cp='rsync -ae ssh'
alias cpv='rsync -vhae ssh --progress'
alias cpa='rsync -vhae ssh --progress --append'

alias rsync-copy='rsync -avzh --progress'
alias rsync-move='rsync -avzh --progress --remove-source-files'

Danach kannst du rsync als bessere cp Alternative verwenden:

$ cpa remote:/data/big_recording.fif .
receiving incremental file list
big_recording.fif
  1,138,341,699 100%   81.11MB/s    0:00:13 (xfr#1, to-chk=0/1)
sent 30 bytes  received 1,138,480,768 bytes  84,331,910.96 bytes/sec
total size is 1,138,341,699  speedup is 1.00

Schlagwörter zu diesem Beitrag

terminal