Rsync mostra o progresso de um arquivo individual


21

Estou usando o rsync para carregar / baixar um arquivo muito grande (20 GB). Estou ciente da opção --progress, mas o que ela faz no meu caso está apenas me mostrando o resultado no final.

Meu problema é que, durante uma conexão instável - não sei se ele ainda está baixando / carregando ou se algo deu errado. Existe uma maneira de mostrar a barra de progresso de um arquivo individual? Algo semelhante ao que o wget faz por padrão?

Obrigado!


4
Eu uso o rsync há mais de 10 anos e não acredito que nunca fiz essa pergunta.
Slm

Respostas:


17

Isso pode ser o que você procura.

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

Os interruptores dividem-se da seguinte maneira:

  • -avvz = arquivar, detalhado x 2, compactar
  • --times = preservar os tempos de modificação
  • --stats = fornece algumas estatísticas de transferência de arquivos
  • --checksum = pula com base na soma de verificação, não no tempo e tamanho da modificação
  • --human-readable = números de saída em um formato legível por humanos
  • --acls = preservar ACLs (implica -p)
  • --itemize-changes = gera um resumo de alterações para todas as atualizações
  • --progress = mostra o progresso durante a transferência
  • --out-format = '[% t] [% i] (última modificação:% M) (bytes:% -10l)% -100n'
    • % t = data e hora atuais
    • % i = uma lista detalhada do que está sendo atualizado
    • % M = hora da última modificação do arquivo
    • % -10l = o tamanho do arquivo em bytes (-10 é para alinhamento e precisão)
    • % -100n = o nome do arquivo (formato abreviado; à direita "/" no diretório) (-100 é para alinhamento e precisão)

NOTA: Consulte as páginas de manual para rsynce rsyncd.confpara obter detalhes completos sobre os comutadores acima.

O comando acima produz a seguinte transcrição:

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 de progresso nas versões mais recentes do rsync?

Me deparei com esta questão SF:

Uma das respostas mencionou que nas versões mais recentes do rsyncagora há suporte para uma barra de progresso. Se parece com isso:

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

Essa barra de progresso ainda não mostra o status de arquivos individuais na transferência, mas mostra uma porcentagem da transferência geral que pode ser útil.


11
Obrigado pela resposta. Ainda não é exatamente o que estou procurando. O que eu realmente preciso é quando você baixa um arquivo individual (digamos glib-2.0 / glib-object.h) - isso me mostraria uma barra de progresso apenas para esse arquivo. Imagine glib-2.0 / glib-object.h sendo 20Gb. Como você saberia se ainda está baixando e quanto tempo resta?
Salmon


1

Você está usando o rsync no modo daemon? O comportamento padrão do rsync (no Debian 6) é como você solicitou. No entanto, estou descobrindo na página de manual do rsyncd.conf que o comportamento padrão no modo daemon é:

transfer logging
Este parâmetro permite o registro por arquivo de downloads e uploads em um formato um pouco semelhante ao usado pelos daemons ftp. O daemon sempre registra a transferência no final, portanto, se uma transferência for interrompida, nenhuma menção será feita no arquivo de log.
Se você deseja personalizar as linhas de log, consulte o parâmetro "formato de log".

Portanto, se estiver usando o rsync no modo daemon, parece que você precisará adicionar a linha "log de transferência" ao rsyncd.conf.


Não, não estou no modo Deamon e não estou vendo a barra de progresso de cada arquivo, apenas o resumo de todo o processo.
Salmon

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.