Rsync zeigt den Fortschritt für einzelne Dateien an

21

Ich verwende Rsync zum Hochladen / Herunterladen einer ziemlich großen Datei (20 GB). Mir ist die Option --progress bekannt, aber in meinem Fall wird nur das Ergebnis am Ende angezeigt.

Mein Problem ist, dass während einer instabilen Verbindung - ich weiß nicht, ob es noch heruntergeladen / hochgeladen wird oder etwas schief gelaufen ist. Gibt es eine Möglichkeit, den Fortschrittsbalken für eine einzelne Datei anzuzeigen? Etwas ähnliches wie das, was wget standardmäßig macht?

Vielen Dank!

Lachs
quelle
4
Ich benutze Rsync seit über 10 Jahren und kann nicht glauben, dass ich diese Frage nie gestellt habe.
Slm

Antworten:

17

Das könnte es sein, wonach du suchst.

% rsync -avvz --times --stats --checksum --human-readable --acls \
    --itemize-changes --progress \
    --out-format='[%t] [%i] (Last Modified: %M) (bytes: %-10l) %-100n' \
    /usr/include/glib-2.0 my-glib-copy/

Die Schalter setzen sich wie folgt zusammen:

  • -avvz = Archivieren, ausführlich x 2, komprimieren
  • --times = Änderungszeiten beibehalten
  • --stats = gibt einige Dateiübertragungsstatistiken an
  • --checksum = Überspringen basierend auf der Prüfsumme, nicht der Mod-Zeit und der Größe
  • --human-readable = gibt Zahlen in einem für Menschen lesbaren Format aus
  • --acls = ACLs beibehalten (impliziert -p)
  • --itemize-changes = gibt eine Änderungsübersicht für alle Updates aus
  • --progress = Fortschritt während der Übertragung anzeigen
  • --out-format = '[% t] [% i] (Zuletzt geändert:% M) (Bytes:% -10l)% -100n'
    • % t = aktuelles Datum und Uhrzeit
    • % i = eine detaillierte Liste dessen, was aktualisiert wird
    • % M = der Zeitpunkt der letzten Änderung der Datei
    • % -10l = die Länge der Datei in Bytes (-10 steht für Ausrichtung und Genauigkeit)
    • % -100n = der Dateiname (Kurzform; abschließendes "/" im Verzeichnis) (-100 steht für Ausrichtung und Präzision)

HINWEIS: Siehe die Manpages rsyncund rsyncd.conffür weitere Informationen zu dem oben genannten Schalter.

Der obige Befehl erzeugt das folgende Protokoll:

sending incremental file list
delta-transmission disabled for local transfer or --whole-file
[2012/12/23 21:34:46] [cd+++++++++] (Last Modified: 2010/12/19-08:13:31) (bytes: 4096      ) glib-2.0/
[2012/12/23 21:34:46] [>f+++++++++] (Last Modified: 2010/09/30-15:02:30) (bytes: 1511      ) glib-2.0/glib-object.h
       1.51K 100%    0.00kB/s    0:00:00
       1.51K 100%    0.00kB/s    0:00:00 (xfer#1, to-check=181/183)
[2012/12/23 21:34:46] [>f+++++++++] (Last Modified: 2010/09/30-15:02:30) (bytes: 2910      ) glib-2.0/glib.h
       2.91K 100%    2.78MB/s    0:00:00
       2.91K 100%    2.78MB/s    0:00:00 (xfer#2, to-check=180/183)
[2012/12/23 21:34:46] [>f+++++++++] (Last Modified: 2010/09/30-15:02:31) (bytes: 3613      ) glib-2.0/gmodule.h
       3.61K 100%    3.45MB/s    0:00:00
       3.61K 100%    3.45MB/s    0:00:00 (xfer#3, to-check=179/183)
...
...
[2012/12/23 21:34:46] [>f+++++++++] (Last Modified: 2010/09/30-15:02:31) (bytes: 8431      ) glib-2.0/gobject/gvaluecollector.h
       8.43K 100%  141.96kB/s    0:00:00
       8.43K 100%  141.96kB/s    0:00:00 (xfer#178, to-check=1/183)
[2012/12/23 21:34:46] [>f+++++++++] (Last Modified: 2010/09/30-15:02:31) (bytes: 8507      ) glib-2.0/gobject/gvaluetypes.h
       8.51K 100%  143.23kB/s    0:00:00
       8.51K 100%  143.23kB/s    0:00:00 (xfer#179, to-check=0/183)
total: matches=0  hash_hits=0  false_alarms=0 data=1305506

rsync[2996] (sender) heap statistics:
  arena:         540672   (bytes from sbrk)
  ordblks:            3   (chunks not in use)
  smblks:             7
  hblks:              2   (chunks from mmap)
  hblkhd:        401408   (bytes from mmap)
  allmem:        942080   (bytes from sbrk + mmap)
  usmblks:            0
  fsmblks:          592
  uordblks:      404784   (bytes used)
  fordblks:      135888   (bytes free)
  keepcost:      134240   (bytes in releasable chunk)

rsync[2999] (server receiver) heap statistics:
  arena:         286720   (bytes from sbrk)
  ordblks:            2   (chunks not in use)
  smblks:             8
  hblks:              3   (chunks from mmap)
  hblkhd:        667648   (bytes from mmap)
  allmem:        954368   (bytes from sbrk + mmap)
  usmblks:            0
  fsmblks:          672
  uordblks:      174480   (bytes used)
  fordblks:      112240   (bytes free)
  keepcost:      102352   (bytes in releasable chunk)

rsync[2998] (server generator) heap statistics:
  arena:         233472   (bytes from sbrk)
  ordblks:            4   (chunks not in use)
  smblks:             6
  hblks:              2   (chunks from mmap)
  hblkhd:        401408   (bytes from mmap)
  allmem:        634880   (bytes from sbrk + mmap)
  usmblks:            0
  fsmblks:          448
  uordblks:       83152   (bytes used)
  fordblks:      150320   (bytes free)
  keepcost:      131120   (bytes in releasable chunk)

Number of files: 183
Number of files transferred: 179
Total file size: 1.31M bytes
Total transferred file size: 1.31M bytes
Literal data: 1.31M bytes
Matched data: 0 bytes
File list size: 6.30K
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 350.39K
Total bytes received: 3.43K

sent 350.39K bytes  received 3.43K bytes  707.64K bytes/sec
total size is 1.31M  speedup is 3.69

Fortschrittsbalken in neueren Versionen von rsync?

Ich bin auf diese SF-Frage gestoßen:

In einer der Antworten wurde erwähnt, dass in neueren Versionen rsynceine Fortschrittsanzeige unterstützt wird. Es sieht aus wie das:

% ./rsync -a --info=progress2 /usr .
    305,002,533  80%   65.69MB/s    0:00:01  xfr#1653, ir-chk=1593/3594)

Dieser Fortschrittsbalken zeigt immer noch nicht den Status einzelner Dateien in der Übertragung an, zeigt jedoch einen Prozentsatz der gesamten Übertragung an, was hilfreich sein könnte.

slm
quelle
1
Danke für die Antwort. Es ist immer noch nicht ganz das, wonach ich suche. Was ich wirklich brauche, ist, wenn Sie eine einzelne Datei herunterladen (sagen wir glib-2.0 / glib-object.h) - es würde mir nur für diese Datei einen Fortschrittsbalken anzeigen . Stellen Sie sich glib-2.0 / glib-object.h mit 20 GB vor. Wie würden Sie wissen, ob der Download noch läuft und wie viel Zeit noch bleibt?
Lachs
6

rsync -vP funktioniert bei mir.

Von der Manpage : "-P wie --partial --progress"

Pradyumna
quelle
1

Verwenden Sie rsync im Dämonmodus? Das Standardverhalten von rsync (unter Debian 6) ist das, was Sie angefordert haben. In der Manpage für rsyncd.conf stelle ich jedoch fest, dass das Standardverhalten im Dämonmodus wie folgt lautet:

Übertragungsprotokollierung
Dieser Parameter aktiviert die Dateiprotokollierung von Downloads und Uploads in einem Format, das dem von FTP-Daemons ähnelt. Der Daemon protokolliert die Übertragung immer am Ende. Wenn eine Übertragung abgebrochen wird, wird in der Protokolldatei keine Erwähnung gemacht.
Wenn Sie die Protokollzeilen anpassen möchten, lesen Sie den Parameter "Protokollformat".

Wenn Sie also rsync im Dämonmodus verwenden, müssen Sie die Zeile "Übertragungsprotokollierung" zur Datei rsyncd.conf hinzufügen.

jkim
quelle
Nein, ich bin nicht im Deamon-Modus und sehe nicht die Fortschrittsanzeige für jede Datei, sondern nur die Zusammenfassung für den gesamten Prozess
Salmon