Rsync mostra lo stato di avanzamento del singolo file


21

Sto usando rsync per caricare / scaricare un file abbastanza grande (20Gb). Sono a conoscenza dell'opzione --progress, ma quello che fa nel mio caso è solo mostrarmi il risultato alla fine.

Il mio problema è che durante una connessione instabile - non so se sta ancora scaricando / caricando o qualcosa è andato storto. C'è un modo per mostrare la barra di avanzamento per un singolo file? Qualcosa di simile a ciò che wget fa di default?

Grazie!


4
Ho usato rsync per oltre 10 anni e non posso credere di non aver mai fatto questa domanda.
slm

Risposte:


17

Questo potrebbe essere quello che stai cercando.

% 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/

La ripartizione degli interruttori è la seguente:

  • -avvz = archivio, verboso x 2, comprimi
  • --times = conserva i tempi di modifica
  • --stats = fornisce alcune statistiche di trasferimento dei file
  • --checksum = salta in base al checksum, non a mod-time e dimensioni
  • --human-readable = numeri di output in un formato leggibile dall'uomo
  • --acls = conserva ACL (implica -p)
  • --itemize-changes = genera un riepilogo delle modifiche per tutti gli aggiornamenti
  • --progress = mostra l'avanzamento durante il trasferimento
  • --out-format = '[% t] [% i] (Ultima modifica:% M) (byte:% -10l)% -100n'
    • % t = ora della data corrente
    • % i = un elenco dettagliato di ciò che viene aggiornato
    • % M = ora dell'ultima modifica del file
    • % -10l = la lunghezza del file in byte (-10 è per allineamento e precisione)
    • % -100n = il nome file (forma breve; trascinamento "/" su dir) (-100 è per allineamento e precisione)

NOTA: consultare le pagine man per rsynce rsyncd.confper tutti i dettagli sugli switch sopra.

Il comando sopra produce la seguente trascrizione:

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

Barra di avanzamento nelle versioni più recenti di rsync?

Mi sono imbattuto in questa domanda di fantascienza:

Una delle risposte menzionava che nelle versioni più recenti rsyncc'è ora il supporto per una barra di avanzamento. Sembra così:

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

Questa barra di avanzamento non mostra ancora lo stato dei singoli file nel trasferimento, ma mostra una percentuale del trasferimento complessivo che potrebbe essere utile.


1
Grazie per la risposta. Non è ancora esattamente quello che sto cercando. Quello di cui ho davvero bisogno è quando scarichi un singolo file (diciamo glib-2.0 / glib-object.h) - mi mostrerebbe una barra di avanzamento solo per questo file. Immagina che glib-2.0 / glib-object.h siano 20Gb. Come fai a sapere se è ancora in corso il download e quanto tempo è rimasto?
Salmone,


1

Stai usando rsync in modalità demone? Il comportamento predefinito di rsync (su Debian 6) è come hai richiesto. Tuttavia, sto trovando nella pagina man di rsyncd.conf che il comportamento predefinito in modalità demone è:

transfer transfer
Questo parametro abilita la registrazione per file di download e upload in un formato un po 'simile a quello usato dai demoni ftp. Il demone registra sempre il trasferimento alla fine, quindi se un trasferimento viene interrotto, non verrà fatto alcun riferimento nel file di registro.
Se si desidera personalizzare le righe del registro, consultare il parametro "Formato registro".

Quindi, se usi rsync in modalità demone, sembra che dovrai aggiungere la riga "transfer logging" a rsyncd.conf.


No, non sono in modalità Deamon e non vedo la barra di avanzamento per ogni file, ma solo il riepilogo per l'intero processo
Salmone,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.