rsync - Nur hochgeladene Dateien melden

14

Ich habe ein Problem mit rsync: Entweder werden mir alle Dateien in den Verzeichnissen angezeigt, die ich synchronisiere (wenn ich das Flag verwende -v), oder es wird überhaupt nichts angezeigt (wenn ich nicht verwende -v).

Ich möchte rsync ruhig haben, ausgenommen die Akten, die wirklich zum weiten Ende hochgeladen werden mussten. Gibt es ein Flag, um diese Art der Berichterstellung zu aktivieren? Ich kann dies nicht in der Dokumentation finden

dangonfast
quelle

Antworten:

11

Ja, überprüfen Sie die -iFlagge. Es gibt einen Bericht über jede Operation in einem kryptischen Format. Die genaue Definition des Formats finden Sie auf der Manpage.

Um die Liste der Dateien abzurufen, die an den Remote-Host gesendet werden, können Sie Folgendes verwenden:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'
Oliver
quelle
1
Dies meldet wieder alle Dateien, nicht die geänderten.
Dangonfast
@gonvaled Nein, nur die Dateien, die an den Remote-Host gesendet werden, werden ausgegeben (as <fcstpoguax filename, wobei die verschiedenen Flags angeben, warum sie aktualisiert werden müssen). Wenn alle Dateien gemeldet werden, liegt möglicherweise ein Problem mit Ihrem Test oder Ihrer Umgebung vor.
Oliver
Ich glaube, Du hast recht. Ich habe mir die Manpage angesehen und sie wird beschrieben, wie Sie sagen. Aber mein System meldet alle Dateien. Vielleicht stimmt etwas mit dem anderen Ende nicht ...
dangonfast
Mmmm. Näher heran: Die Berichtszeichenfolge lautet (für alle Dateien) <f..T....... Laut Manpage bezieht sich dies auf Zeitstempel.
Dangonfast
1
mit grep -E '^[^.]|^$'würde auch statistische (oder warnungen, fehler, ...)
Frank Nocke
9

rsync mit einer einzigen -vDatei druckt tatsächlich nur übertragene Dateien. Wenn Sie jedes Mal die vollständige Liste erhalten, bedeutet dies wahrscheinlich, dass der standardmäßige Vergleichsalgorithmus rsync src / dest, der auf der Änderungszeit + Größe basiert, für Ihren Fall nicht geeignet ist. Sie können das -c( --checksum) -Flag hinzufügen, mit dem rsync Dateien durch Prüfsummen vergleichen kann. Beachten Sie, dass dies offensichtlich einen gewissen E / A-Aufwand verursacht.

Etwas verwandt ist die Tatsache, dass Sie, wenn Sie --info=fliststattdessen verwenden -v, eine stärker beschnittene Ausgabe der Dateien erhalten (Sie überspringen im Grunde die Kopf- und Fußzeile der typischen -vAusgabe).

Amr Mostafa
quelle
1
--info=flistist nur in rsync> = 3.1 verfügbar, was nicht überall möglich ist. Zum Beispiel wird macOS mit einer alten Version 2.6.9 ausgeliefert, da Rsync v3 unter GPL 3
läuft
1
Denken Sie daran, dass das Gerücht der Apple GPL überaus saftig ist und dass Enterprise Linux über einen umfangreichen Support-Bereich (14 Jahre) verfügt, in dem Versionen gesperrt (und verzweigt) sind, um die Zertifizierung zu gewährleisten und die Kompatibilität (API + ABI) über die Laufzeit der unterstützten Version zu gewährleisten . Tatsächlich ist dies der einzig mögliche Weg, und der Nebeneffekt ist, dass die Versionsnummern alt erscheinen und die neuen Funktionen für die Enterprise noch lange nicht verfügbar sind.
user2066657
2

Eine Sache, die mir in den Sinn kommt, ist, ein ausführlicheres Protokollformat zu verwenden und herauszufinden, was Sie erhalten möchten.

z.B:

rsync -a --out-format="%b  %i %f" /etc/ /tmp/qq/ |awk '{if ($1>0) {print $3}}'

Dies ist nicht sehr robust, es wird nicht gut mit Dateinamen mit Leerzeichen umgehen.

pQd
quelle
1

1. Verwenden Sie die -iOption

Für diese symbolisierten (oder: kryptischen) Änderungsflags. Ihre Ausgabe sieht folgendermaßen aus:

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2. Beginnen Sie jede Zeile mit einem Punkt.

Lassen Sie alle anderen Zeilen (zur besseren Lesbarkeit auch leere) durch:

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

Und hier sind wir :-) - Genau das, was der Arzt bestellt hat:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

Das Vermeiden von Punkten anstelle des Suchens > hat den Vorteil, dass auch Statistiken, aber auch potenzielle Fehler, Warnungen usw. durchgelassen werden.

Statistiken am Ende zu haben, ist eine persönliche Präferenz. Verwenden -h --statsSie nicht, wenn Sie diese nicht mögen. Ich gehe davon aus, dass Ihr Hauptinteresse darin besteht, nicht zu sehen, wie hundert oder Tausende von unveränderten Dateien vorbeirollen ...

Frank Nocke
quelle
0

Ich glaube nicht, dass es dafür eine Flagge gibt, aber vielleicht gibt es sie jetzt. So habe ich es gemacht:

rsync -vv [other options] | grep -v 'uptodate'
Mike
quelle
1
Mein rsync (Version 3.0.7) fügt uptodateder Berichterstellung nichts hinzu und kann daher nicht herausgefiltert werden.
Dangonfast
Ich möchte korrigieren oder zumindest klarstellen, was Mike oben gepostet hat und worauf @ jeckyll2hide hingewiesen hat. Ich denke, das Problem ist nicht, dass rsync -v nicht mehr die Zeichenfolge "uptodate" ausgibt, sondern dass Sie rsync -vv verwenden müssen. Beachten Sie die beiden vs. Ich habe gerade überprüft, dass dies unter Ubuntu 14.04 mit rsync Version 3.1.0 funktioniert. Mike, kannst du deinen Beitrag aktualisieren, um dies widerzuspiegeln?
John Mark Mitchell