Acompanhando o progresso com xargs

11

Estou usando o xargs para executar um comando em um conjunto de parâmetros de entrada como:

cat <someinput> | xargs -n 1 -P 5 <somecmd>

O arquivo de entrada é muito longo e demora muito para ser executado. Então, estou apenas esperando o prompt de comando aparecer. Existe uma maneira de exibir uma barra de progresso para o número de argumentos de entrada que foram concluídos?

Eu tentei usar 'bar', mas sempre obtive uma taxa de transferência 'infinita'. Parece que o xargs lê toda a entrada antes de executar comandos.

    
por Utkarsh Sinha 19.02.2014 / 11:01

3 respostas

13

Se você tem o GNU Parallel, você pode executar:

cat <someinput> | parallel --bar -P 5 <somecmd>

O GNU Parallel é um paralelizador geral e facilita a execução de trabalhos em paralelo na mesma máquina ou em várias máquinas para as quais você tem acesso ssh.

Se você tem 32 tarefas diferentes que você quer rodar em 4 CPUs, uma forma direta de paralelizar é rodar 8 tarefas em cada processador:

O

GNUParallelgeraumnovoprocessoquandoumtermina-mantendoasCPUsativaseeconomizandotempo:

Instalação

Uma instalação pessoal não requer acesso root. Isso pode ser feito em 10 segundos ao fazer isso:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Para outras opções de instalação, consulte o link

Saiba mais

Veja mais exemplos: link

Assista aos vídeos de introdução: link

Percorra o tutorial: link

Inscreva-se na lista de e-mail para obter suporte: link

    
por 24.09.2014 / 22:56
9

Você pode usar pv:

cat <someinput> | pv -p -s sizeof_someimput | xargs -n 1 -P 5 <somecmd>

Com isso você saberá onde está a leitura de someimput , assim você saberá aproximadamente onde está o tratamento de someimput .

    
por 19.02.2014 / 11:17
2

Se você está procurando apenas uma indicação geral do progresso, o método mais simples é apenas ecoar antes de executar o comando que você deseja fazer.

Exemplo: cat <someinput> | xargs -I{} sh -c 'echo {}; <somecmd>;'

-I{} define {} para a string atual sendo processada

sh -c permitirá que você execute vários comandos (nota: ponto-e-vírgula após cada comando ser necessário, incluindo o último .

    
por 23.01.2017 / 04:54