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

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

[ Hits: 26.284 ]

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

Guia pós-instalação do Fedora 22 Xfce Spin

Skype no Slackware SEM PulseAudio

Use o Vim no Slackware

Instalando Pragha Music Player no Slackware

Atualizando Fedora 21 para 22 sem usar FedUp, Yumex ou Fedy

Leitura recomendada

Ver conexões httpd simultâneas

O comando script

Cuidado com o "sl"

Backup em fita DAT

Instalando pacotes com dependências (rpm)

  

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