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

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

[ Hits: 26.216 ]

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

MPlayer - Reproduzindo diretórios (e seus subdiretórios) de música

Extraindo referências de artigos acadêmicos ou científicos de arquivo .pdf para .txt

Instalação do Spotify no openSUSE Leap 15

Habilitando supressão de ruído no PulseAudio

Imprimindo para PDF a partir de programas rodando sob o Wine no openSUSE 13.2

Leitura recomendada

Removendo vários arquivos de uma lista gigante (Argument list too long)

Compactando arquivos no Linux

Rotacionar log antes de configurar o logrotate

Pesquisa de arquivos e executáveis em pacotes .deb

Economizando digitação com o comando cp

  

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