pv - Acompanhando progresso de comandos no terminal via barra de progresso

Publicado por Luís Fernando C. Cavalheiro em 23/10/2013

[ Hits: 26.835 ]

Blog: https://github.com/lcavalheiro/

 


pv - Acompanhando progresso de comandos no terminal via barra de progresso



Alô, "noosfera" do Viva o Linux. Aqui começa mais uma dica do Dino trazendo novidades - dica do Dino trouxe cachimbo da paz!

Hoje, nós vamos expandir a dica:
Para qualquer comando que você execute no terminal, mas, normalmente, não ofereça uma barra de progresso para lhe dar uma luz sobre a quantas anda a joça (dd, mv, convert, qualquer coisa que você imaginar).

Para isso, vamos usar o comando pv, acrônimo para Pipe Viewer.

Esse comando funciona de uma maneira bem simples até: ele recebe a saída de um comando via pipe e então, formata os dados conforme as flags que você indicar. Vamos pegar um exemplo que aconteceu em:
Com o bom e velho Gedimar, o grande nome por trás do UbuntUCA: ele queria comprimir um arquivo .pdf e exibir na tela o progresso da operação.

Para comprimir, é moleza:

convert arquivo.pdf -resize 50% saida.pdf

Sim, o convert é do mal, é sinistro, tem pacto com o diabo, como vocês queiram, mas ele manipula arquivos PDF.

Só que não tem opção nenhuma nessa geringonça que coloque uma saída verbose do que está acontecendo, aí fica o usuário com cara de nádegas mal limpas após uma diarreia, adivinhando quanto tempo falta pro comando terminar de rodar.

Outros mal amestradinhos que fazem isso, são o dd, DataDestroyer pros que não sabem como usá-lo, o mv (que exibe só qual arquivo ele está movendo, não quantos percentuais faltam), o apt-get autoclean...

Mas, não se aflija, não se desespere, a dica do Dino voltou da selva com uma tonelada! Enfie, ao final do comando mal amestrado, o pipe:

| pv -p -e -t -a -r

Voltando ao exemplo:

convert arquivo.pdf -resize 50% saida.pdf | pv -p -e -t -a -r

Onde:
  • -p :: cria a barra de progresso;
  • -e :: exibe o tempo estimado para o fim do procedimento;
  • -t :: exibe o tempo transcorrido;
  • -a :: coloca a velocidade média do procedimento;
  • -r :: coloca a velocidade total do procedimento.

Eu uso essas opções assim por questões mnemônicas: me lembram "The Empire of PETAR Throne", um dos RPGs de mesa mais interessantes que eu já joguei.

O pv tem muito mais opções, experimente um:

man pv

Conclusão

Com essa tonelada, a dica do Dino se despede, pois a Polícia Federal preparou uma cilada braba pra ela.

Assim, fiquem espertos, pois amanhã será seu desaniversário, o mundo vai acabar e você pode morrer no processo. E ótimo Samhaim pra todos vocês!

Outras dicas deste autor

Copiando CD de músicas no Slackware pelo shell

usbboot.img - A mídia de instalação mínima do Slackware

Desabilitando o indexador de arquivos Baloo no KDE Plasma

Desabilitando o UEFI e o Secure Boot na BIOS

Skype no Slackware SEM PulseAudio

Leitura recomendada

Substituindo ocorrências de palavras dentro de um arquivo

Eliminando linhas em branco

Alguns comandos pkg no FreeBSD

Command Line Basics - Curso online e gratuito

Rotacionar log antes de configurar o logrotate

  

Comentários
[1] Comentário enviado por andre.vmatos em 23/10/2013 - 16:11h

Hmm. Não está funcionando aqui o exemplo do convert PDF. Pelo que li na man do pv, ele funciona como um intermediário em um pipe, mas o convert não passa as informações via saída padrão (pipe), e sim, salva diretamente no arquivo passado como último parâmetro.

[2] Comentário enviado por lcavalheiro em 24/10/2013 - 11:06h


[1] Comentário enviado por andre.vmatos em 23/10/2013 - 16:11h:

Hmm. Não está funcionando aqui o exemplo do convert PDF. Pelo que li na man do pv, ele funciona como um intermediário em um pipe, mas o convert não passa as informações via saída padrão (pipe), e sim, salva diretamente no arquivo passado como último parâmetro.


Para ser sincero, eu não testei não. Arrisquei o comando e o Gedimar disse que funcionou, então eu confio nele ;-)

[3] Comentário enviado por removido em 24/10/2013 - 22:42h


[2] Comentário enviado por lcavalheiro em 24/10/2013 - 11:06h:


[1] Comentário enviado por andre.vmatos em 23/10/2013 - 16:11h:

Hmm. Não está funcionando aqui o exemplo do convert PDF. Pelo que li na man do pv, ele funciona como um intermediário em um pipe, mas o convert não passa as informações via saída padrão (pipe), e sim, salva diretamente no arquivo passado como último parâmetro.

Para ser sincero, eu não testei não. Arrisquei o comando e o Gedimar disse que funcionou, então eu confio nele ;-)


Sim, o comando funciona e bem, o problema geralmente é com o tipo de arquivo em pdf a ser convertido e não me refiro a espaçamento ou símbolos no nome... ao testar a conversão do Debian HandBook tive problemas, mas com um outro arquivo não:

$ convert packaging-tutorial.en.pdf -resize 50% saida.pdf | pv -petar
0:00:15 [ 0B/s] [ 0B/s] [<=>

* dia desses fiz uma pequena dica sobre o pv e o gcp:

http://gnutwoall.wordpress.com/2013/10/19/pv-e-gcp-alternativas-ao-advanced-copy/

Boa dica!

[4] Comentário enviado por lcavalheiro em 25/10/2013 - 01:26h


[3] Comentário enviado por edps em 24/10/2013 - 22:42h:


[2] Comentário enviado por lcavalheiro em 24/10/2013 - 11:06h:


[1] Comentário enviado por andre.vmatos em 23/10/2013 - 16:11h:

Hmm. Não está funcionando aqui o exemplo do convert PDF. Pelo que li na man do pv, ele funciona como um intermediário em um pipe, mas o convert não passa as informações via saída padrão (pipe), e sim, salva diretamente no arquivo passado como último parâmetro.

Para ser sincero, eu não testei não. Arrisquei o comando e o Gedimar disse que funcionou, então eu confio nele ;-)

Sim, o comando funciona e bem, o problema geralmente é com o tipo de arquivo em pdf a ser convertido e não me refiro a espaçamento ou símbolos no nome... ao testar a conversão do Debian HandBook tive problemas, mas com um outro arquivo não:

$ convert packaging-tutorial.en.pdf -resize 50% saida.pdf | pv -petar
0:00:15 [ 0B/s] [ 0B/s] [<=>

* dia desses fiz uma pequena dica sobre o pv e o gcp:

http://gnutwoall.wordpress.com/2013/10/19/pv-e-gcp-alternativas-ao-advanced-copy/

Boa dica!


Valeu, Edinaldo!

[5] Comentário enviado por albfneto em 25/10/2013 - 10:14h

mais uma coisa legal. Favoritada!
acabei de testar.
em sabayon, precisa instalar antes o pacote pv.
funciona até com comandos que já tem verbose, dá uma saída mais detalhada.

[6] Comentário enviado por removido em 24/08/2016 - 15:19h

Caí de pára-quedas!

Dica legal!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts