Eu já procurei por essa opção, mas encontrei apenas soluções que envolvem correções personalizadas . O fato de ele não aparecer em --help e nenhuma informação adicional pode ser encontrada provavelmente indica que as respostas são 'não', mas eu gostaria de ver isso confirmado.
É possível mostrar o progresso total da transferência de arquivos com o rsync?
Respostas:
danakim está correto. Não há maneiras triviais de adicionar um indicador de progresso total.
A razão para isso é que, quando o rsync examina uma lista de arquivos a serem sincronizados, ele não sabe antecipadamente quais arquivos precisarão ser alterados. Se você estiver realizando transferências delta, os próprios deltas deverão ser calculados com antecedência para fornecer uma imagem total do trabalho que precisa ser realizado.
Em outras palavras, a maneira mais fácil de calcular quanto trabalho deve ser feito é realmente fazê-lo.
fonte
--size-only
ou algo parecido é ainda mais impreciso.Agora existe uma maneira oficial de fazer isso no rsync (versão 3.1.0, protocolo 31, testado com Ubuntu Trusty 14.04).
Tentei com minha
/usr
pasta porque queria esse recurso para transferir sistemas de arquivos inteiros e/usr
parecia ser um bom exemplo representativo.A
--info=progress2
dá uma percentagem global agradável, mesmo se é apenas um valor parcial. Na verdade, minha/usr
pasta tem mais de 6 shows:e
rsync
demorou muito tempo para digitalizar tudo. Então, quase o tempo todo, a porcentagem que eu vi foi cerca de 90% concluída, mas, no entanto, é reconfortante ver que algo está sendo copiado :)Referências:
fonte
--info=progress2
não funciona com-v
--no-i-r
opção também, pararsync
não digitalizar incrementalmente, mas completamente antes de copiar e saber + exibe quanto trabalho resta.--human-readable
(ou-h
) para ver o tamanho total em MB / GB .. em andamento.Você pode com 'pv' (
apt-get install pv
com Debian e ubuntu). Eu recomendo monitorar o número de arquivos transferidos, pois a quantidade de dados transferidos não está correlacionada com o tamanho dos arquivos, mas no delta entre a origem e o destino. E a contagem de arquivos contará o mesmo progresso para um delta grande e outro com delta pequeno. O que significa que, em qualquer caso, a estimativa da ETA pode estar distante. O ETA baseado em tamanho funciona apenas se o seu destino estiver vazio, neste caso delta == tamanho da fonte.A idéia geral é emitir uma linha por arquivo 'transferido' do rsync e contar essas linhas com 'pv':
Eu costumo fazer backup de sistemas de arquivos inteiros (por várias razões); nesse caso, você pode usar o mais barato
df
para obter o número de arquivos (em vez dedu
oufind
que atravessará sua hierarquia de fontes outra vez após o rsync fazer isso). A opção -x parece garantir que o rsync permaneça no mesmo sistema de arquivos de origem (e não siga outras montagens internas):Se você deseja contar arquivos no / source de uma maneira geral, use
find /source|wc -l
(aviso novamente: pode ser lento e pesado na E / S).fonte
df -i /source
obtém o número de inodes (arquivos) de toda a partição na qual / source reside. Caso contrário, use 'find' para contar arquivos dentro de um diretório dentro da expressão "$ ()".du
oufind
- digamos que você está terminando uma cópia incompleta ou fazendo uma atualização no local com exclusões - é usarrsync -ai --dry-run
para obter a mesma lista de arquivos a principal corrida estará passando parapv
O seguinte se aplica ao rsync versão 3.0.0 e superior. As opções descritas abaixo foram introduzidas nessa versão em 1º de março de 2008.
Juntamente com --info = progress2, você também pode usar a opção --no-inc-recursive (ou seu apelido mais curto --no-ir ) para desativar a recursão incremental.
Isso criará a lista de arquivos inteira no início, em vez de descobrir mais arquivos de forma incremental à medida que a transferência continuar. Como ele conhecerá todos os arquivos antes de iniciar, fornecerá um relatório melhor do progresso geral. Isso se aplica ao número de arquivos - não informa nenhum progresso com base no tamanho dos arquivos.
Isso envolve uma troca. Criar a lista inteira de arquivos com antecedência é mais dispendioso em termos de memória e pode atrasar significativamente o início da transferência real. Como seria de esperar, quanto mais arquivos houver, maior será o atraso e mais memória será necessária.
O seguinte é do manual do rsync (fonte - http://rsync.samba.org/ftp/rsync/rsync.html ):
Consulte também https://rsync.samba.org para obter diferenças de versão específicas (role para baixo e confira os links Notícias de Lançamento).
fonte
Para transferências longas, fico feliz em correr
du -s
dos dois lados. Mesmowatch -n1 du -s
se eu me sentir realmente ansioso.watch
executa um comando (du -s
aqui) periodicamente (a cada 1 segundo aqui) e mostra a saída em tela cheia.fonte
watch
comando!Basicamente não. Você só pode mostrar o progresso por arquivo com o sinalizador --progress, mas é isso.
Acho que você pode escrever um invólucro em volta dele ou usar qualquer um dos patches que você já encontra, mas você deve se perguntar se realmente vale a pena. Você realmente precisa de um progresso total para o rsync?
fonte
--progress
trabalhar--info=progress2
, ele mostrará o progresso global. Você vai precisar para desativar o algoritmo recursivo incremental para que possa ser útil, por isso--info=progress2 --no-inc-recursive
Usei a resposta do zerodeux e escrevi meu próprio pequeno script bash:
fonte
Também procurei como mostrar o progresso total com o rsync e encontrei um respondedor útil desta postagem: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress
Basicamente, você pode usar --info = progress2 na versão dev do rsync 3.1.0 . Aqui está o que o documento disse:
fonte
--info=name0
é ouro 🌈👑Usei a resposta do zerodeux e escrevi meu próprio script BASH:
Alterei o teste seco TODO para
Ele encontra o número de arquivos muito rápido!
fonte
find
só funciona se você estiver localizandorsync
.rsync --dry-run
trabalha com fontes remotas também ...Se você não possui o rsync mais recente (por exemplo, o OS X tem 2.6.9) e não pode usá-lo
--info=progress2
, aqui está outra alternativa para se salvar das páginas de rolagem de texto em andamento:rsync -aPh <source> <destination> | xargs -L1 printf "\33[2K\rTransferring: %s"
Isso imprimirá, em uma linha, o nome do arquivo mais recente sendo transferido:
Transferring: the-latest.file
fonte
Usar
Para ver quais arquivos o rsync atualmente abriu (mostrará o tamanho do arquivo) o rsync copia localmente em um arquivo oculto
fonte
for i in $(pgrep 'rsync'); do ls -l /proc/$i/fd; done
mas sua solução é mais simples.Gostaria de fazer um comentário, mas não tenho reputação suficiente. Em resposta ao comentário de naught101 na resposta escolhida, a opção --progress mostra quantos arquivos foram transferidos do valor total a ser transferido. Eu não percebi isso até olhar para este post e analisar a saída com mais cuidado.
A estatística 'verificar' mostra quantos arquivos são deixados de fora do total. Isso é mais útil ao sincronizar para um novo destino, para que você saiba que todos os arquivos serão totalmente copiados.
Na página do manual:
fonte
Observe a ressalva aqui que mesmo --info = progress2 não é totalmente confiável, pois essa porcentagem é baseada no número de arquivos que o rsync 'conhece' no momento em que o progresso está sendo exibido. Esse não é necessariamente o número total de arquivos que precisavam ser sincronizados (por exemplo, se ele descobrir um grande número de arquivos grandes em um diretório profundamente aninhado). Uma maneira de garantir que --info = progress2 não retorne na indicação de progresso seria forçar o rsync a varrer todos os diretórios recursivamente antes de iniciar a sincronização (em vez de seu comportamento padrão de fazer uma varredura incremental recursiva), fornecendo também a opção --no-inc-recursive. Observe, no entanto, que esta opção também aumentará o uso da memória rsync e o tempo de execução.
fonte
--no-inc-recursive
opção ou seu--no-i-r
alias mais curto . (Ver outra resposta)Eu uso um script que extrai as informações de / proc // io para o processo rsync (ou qualquer outro processo) e saber que o valor total a ser transferido calcula o progresso.
fonte
Se sua versão do
rsync
não aceitar a--info=progress2
opção, você poderá usartqdm
:Para instalar:
Usar:
fonte
Talvez você possa combinar
pv
com o rsync. Especialmente o parâmetro--size
poderia ser útil. Dando uma olhada nos documentos, algo comopv --size $(du -sb . | awk '{print $1}') | rsync -av . host:/your/path
deve funcionar.Aqui você encontrará os documentos e o software.
Ainda não tentei isso sozinho.
fonte
Pode ser um pouco tarde aqui, mas os futuros candidatos a respostas podem se beneficiar.
Isso estava me incomodando também, então eu pensei em ficar suja e escrever meu primeiro script. O pacote zenity deve estar instalado (sudo apt-get install zenity), mas tenho certeza de que provavelmente já estará lá. Além disso, eu uso o wmctrl (controle do gerenciador de janelas) para alterar o título da caixa de diálogo de progresso quando terminar; é facilmente instalável, mas não fará diferença se você não o fizer. Eu só gosto de ver quando é feito no meu painel.
O script basicamente solicita um diretório de origem e destino, calcula a porcentagem do destino sobre o tamanho da fonte usando du e exibe uma barra de progresso.
Nota: Isso funciona apenas para a sincronização completa de diretório / arquivo (eu normalmente o uso para fazer backups do apt cache), portanto, não existe --exclude = / file / in / opção Diretório de origem. Também não funcionará se houver arquivos / diretórios no diretório de destino que não estão no diretório de origem. Não tenho certeza se funciona para fontes / destinos remotos, pois nunca tive a necessidade ou os recursos para testá-lo.
PS. Esse script pode ser muito mal escrito ou muito ineficiente (virgem de script aqui), mas pelo menos serve ao seu objetivo e, é claro, você pode editá-lo e melhorá-lo para atender às suas necessidades. PSS. Além disso, não foi possível obter o botão Cancelar para matar o rsync, então eu apenas o removi.
fonte