Eu tenho alguns arquivos grandes que gostaria de compactar. Eu posso fazer isso com, por exemplo
tar cvfj big-files.tar.bz2 folder-with-big-files
O problema é que eu não consigo ver nenhum progresso, então não tenho idéia de quanto tempo levará ou algo assim. Usando v
posso ver pelo menos quando cada arquivo é concluído, mas quando os arquivos são poucos e grandes, isso não é o mais útil.
Existe uma maneira de obter alcatrão para mostrar um progresso mais detalhado? Como uma porcentagem feita ou uma barra de progresso ou tempo estimado restante ou algo assim. Para cada arquivo único ou para todos eles ou ambos.
pv $FILE.tgz | tar xzf - -C $DEST_DIR
tar cf - /folder-with-big-files -P | pv -s $[$(du -sk /folder-with-big-files | awk '{print $1}') * 1024] | gzip > big-files.tar.gz
Sem essa mudança, eu estava ficando-bash: syntax error near unexpected token ')'
Você pode usar o pv para conseguir isso. Para relatar o progresso corretamente, é
pv
necessário saber quantos bytes você está jogando nele. Portanto, o primeiro passo é calcular o tamanho (em kbyte). Você também pode soltar completamente a barra de progresso e apenaspv
informar quantos bytes ele viu; relataria um 'feito tanto e tão rápido'.E depois:
fonte
pv
parece não vir com o Mac OS X, mas tentarei fazer isso assim que tiver um computador com o MacPorts. Você poderia explicar o que está fazendo lá? Não tenho certeza do que exatamente a primeira linha faz.SIZE=$(($SIZE * 1000 / 1024))
- Eu não sei se isso é uma peculiaridade na minha plataforma em particular, por isso não estou adicionando à resposta:du
retorna tamanho onde 1 kb = 1024 bytes, enquantopv
parece estar esperando 1 kb = 1000 bytes. (Estou no Ubuntu 10.04)du
para usar o seu tamanho de bloco preferido, por exemplodu -s --block-size=1000
, ou apenas trabalhar com bytes simples, por exemplo, largar osk
's das chamadasdu
epv
. No entanto, eu esperaria que ambos usassem,1024
salvo indicação em contrário, por exemplo,--si
ligardu
, por exemplo.du -sb
epv -s
sem nenhum modificador). isso deve acabar com toda a confusão.melhor barra de progresso ..
fonte
Verifique as opções
--checkpoint
e--checkpoint-action
na página de informações do tar (como na minha distribuição, a descrição dessas opções não está contida na página de manual → RTFI).Consulte https://www.gnu.org/software/tar/manual/html_section/tar_26.html
Com estes (e talvez a funcionalidade de escrever seu próprio comando de ponto de verificação), você pode calcular uma porcentagem…
fonte
tar
específico do GNU .Inspirado pela resposta do ajudante
Outra maneira é usar as
tar
opções nativaso resultado é como
um exemplo completo aqui
fonte
Usando apenas alcatrão
tar
tem a opção (desde a v1.12) para imprimir informações de status em sinais usando--totals=$SIGNO
, por exemplo:As
Total bytes written: [...]
informações são impressas em todos os sinais USR1, por exemplo:Fonte:
fonte
Acabei de notar o comentário sobre o MacOS e, embora eu ache a solução do @akira (e pv) muito mais elegante, pensei em seguir um palpite e uma rápida solução alternativa na minha caixa do MacOS com tar e enviar um sinal SIGINFO. Curiosamente, funcionou :) se você estiver em um sistema BSD-like, este deve funcionar, mas em uma caixa de Linux, talvez seja necessário enviar um SIGUSR1, e / ou
tar
pode não funcionar da mesma maneira.O lado negativo é que ele apenas fornecerá uma saída (no stdout) mostrando a você o quão longe está o arquivo atual, pois acho que não tem idéia do tamanho do fluxo de dados.
Portanto, sim, uma abordagem alternativa seria ativar o alcatrão e enviá-lo periodicamente a SIGINFOs sempre que você quiser saber até que ponto chegou. Como fazer isso?
A abordagem manual ad-hoc
Se você quiser verificar o status de maneira ad-hoc, poderá clicar
control-T
(como Brian Swift mencionou) na janela relevante que enviará o sinal SIGINFO. Um problema é que ele será enviado para toda a cadeia, acredito que, se você estiver fazendo:Você também verá o relatório bzip2, seu status e o tar:
Isso funciona muito bem se você quiser apenas verificar se
tar
está executando ou está travado ou lento. Você provavelmente não precisa se preocupar muito com problemas de formatação neste caso, pois é apenas uma verificação rápida.O tipo de abordagem automatizada
Se você sabe que vai demorar um pouco, mas quer algo como um indicador de progresso, uma alternativa seria disparar seu processo de tar e, em outro terminal, calcular o PID e jogá-lo em um script que apenas envia repetidamente um sinal . Por exemplo, se você tiver o seguinte scriptlet (e invoque-o como diz
script.sh PID-to-signal interval-to-signal-at
):Se você invocá-lo dessa maneira, como você está segmentando apenas,
tar
obterá uma saída mais parecida com estao que eu admito, é meio bonito.
Por último, mas não menos importante - meus scripts estão meio enferrujados; portanto, se alguém quiser entrar e limpar / consertar / melhorar o código, continue sua vida :)
fonte
tar
na linha de comando, digitarcontrol-T
enviará um SIGINFO. Se este foi em um script que seria feito comkill -INFO pid
control-T
, eu claramente se acostumaram a spam muitas janelas do console para o meu bem ..kill -l
Inspirado pela resposta de Noah Spurrier
Fonte
fonte
Se você soubesse o número do arquivo em vez do tamanho total de todos eles:
uma alternativa (menos precisa, mas adequada) é usar a opção -l e enviar no canal unix os nomes dos arquivos em vez do conteúdo dos dados.
Vamos colocar 12345 arquivos no mydir , o comando é:
você pode conhecer esse valor antecipadamente (por causa do seu caso de uso) ou usar algum comando como find + wc para descobri-lo:
fonte
tar cfvz ~/mytarfile.tgz . | pv -s $(find . | wc -l) -l > /dev/null
. Funciona para você?Método baseado em tqdm :
fonte
No macOS , primeiro verifique se você tem todos os comandos disponíveis e instale os que estão faltando (por exemplo
pv
) usando o brew .Se você quiser apenas
tar
sem compactação , vá com:Se você deseja compactar , vá com:
fonte
Aqui estão alguns números de um backup de prometheus (dados de métricas) no Debian / buster AMD64:
Cancelou este trabalho porque não havia espaço em disco suficiente disponível.
Experimentando
zstd
como compressor paratar
monitorar o progresso usandopv
:fonte