Beim Übertragen von Dateien zwischen Computern habe ich mir für rsync die Verwendung von

rsync -ahvz --progress QUELLE ZIEL

angewöhnt, wobei ich die üblichen Parameter -a für archivieren (rekursiv, Links folgen, Dateiberechtigungen und -zeiten behalten, usw.), -h für »menschenlesbare« Ausgabe der numerischen Größen und gegebenfalls -z für Kompression (wo sie sich anbietet) noch um -v zum Auflisten jeder übertragenen Datei und --progress zum Anzeigen des Fortschritts einer jeden Datei ergänze – damit ich sehe, daß da etwas passiert.

Überträgt man viele Dateien, kann es durch deren ausführliche Auflistung mit -v allerdings passieren, daß man Fehlermeldungen nicht mehr einfach findet und man am Ende mit einer Meldung wie

sent 7.44G bytes  received 711.13K bytes  11.65M bytes/sec
total size is 7.58G  speedup is 1.02
rsync error: some files could not be transferred (code 23) at
/BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-47/rsync/main.c(992)
[sender=2.6.9]

dasteht (Fehler 23: »Partial transfer due to error«) und mühsam in tmux/screen oder dem Terminal viele Seiten gefüllter Zeilen zurückblättern müßte, um darin zu suchen, welche Dateien warum nicht übertragen werden konnten.

Hier kann man sich aber das rsync-Protokoll zunutze machen, indem man den rsync-Befehl ein zweites Mal ausführt, dann allerdings schweigsamer mit -q für quiet statt -v für verbose. rsync versucht dann, die Unterschiede zwischen QUELLE und ZIEL zu übertragen, welche in der Regel die zuvor wegen Fehlern nicht übertragenen Dateien sein dürften – und wobei man sich diesmal nur noch die Fehler anzeigen läßt. Mit rsync -aq QUELLE ZIEL erhält man dann zum Beispiel:

rsync: recv_generator: failed to stat
"ZIEL/abcdefhijklmnop/qrstuvwxyz0123456789abcd/efghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz012345678/9abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefg":
File name too long (36)
rsync: recv_generator: mkdir
"ZIEL/123/4567890abcdefghijklmnopqrstuv/wxyz0123456789abcdefghijklmno/pqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz12345678/90abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq/rstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcd/efghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefg"
failed: File name too long (36)
*** Skipping any contents from this failed directory ***
rsync error: some files could not be transferred (code 23) at
/BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-47/rsync/main.c(992)
[sender=2.6.9]

In diesen Fällen der zu langen Datei- und Verzichnisnamen auf dem Ziel-Dateisystem (»File name too long (36)«) kann man die Quelldateien und -verzeichnisse entsprechend kürzend umbenennen und danach erneut rsync ausführen, um sie zu synchronisieren. (Wenn bei mir Fehler 36 mit zu langen Datei- und Verzeichnisnamen vorkommt, liegt es eigentlich immer daran, daß auf dem Ziel (zusätzliche) dateisystem-basierte Verschlüsselung mit eCryptfs oder EncFS betrieben wird, bei denen Datei- und Verzeichnisnamen verschlüsselt und damit länger als im unverschlüsselten Zustand werden.)

Zeigt rsync -aq QUELLE ZIEL immer noch zu viele – seitenlange – Fehler an, mag man die Ausgabe von stderr vielleicht in eine Datei umleiten und die sich danach in einem Texteditor anschauen:

rsync -ahvz --progress QUELLE ZIEL 2> ~/rsync-errors.log