md5sum progresso quando canalizado

0

Estou comparando dois dispositivos USB postando rsync com md5sum /usb1/* /usb2/* | sort de tal forma que todos os arquivos, que estão na raiz das unidades, tenham suas somas md5 calculadas, então a saída é classificada por md5sum. O comando inteiro se expande para md5sum /usb1/bigfile1 /usb1/bigfile2 /usb2/bigfile1 /usb2/bigfile2 , por exemplo. Minha impaciência me faz imaginar qual é o progresso, ou seja, em qual arquivo ele está trabalhando agora? Como ele é canalizado para outro comando, não tenho stdout nem stderr para ver qual arquivo está em hash atm. Existe algum tipo de comando para relatar o que outro comando está fazendo agora ?

Eu tenho isso marcado com "sinais", mas eu não sei muito sobre sinais para ficar confortável interrompendo o processo md5sum com um. Eu lembro que era possível enviar um sinal para dd para fazer o progresso do relatório.

    
por user208145 09.05.2017 / 10:02

2 respostas

2

Você pode usar progress para isso:

progress -p $(pgrep md5sum)

ou, se você quiser monitorar continuamente md5sum :

progress -m -p $(pgrep md5sum)

Sem usar uma ferramenta externa, você pode ver quais arquivos md5sum está acessando no Linux listando /proc/$(pgrep md5sum)/fd e descobrir mais informações sobre os descritores de arquivos (incluindo sua posição, que mostra quanto md5sum tem processado) observando os arquivos em /proc/$(pgrep md5sum)/fdinfo .

Como você mencionou, dd imprimirá um relatório de progresso quando receber SIGUSR1 , mas esse é um recurso implementado por dd e não um recurso geral mediado por sinal. Por padrão, enviar SIGUSR1 para um processo irá eliminá-lo.

    
por 09.05.2017 / 10:05
0

Outro comando que funciona como cat é pv . Ele bombeia o conteúdo do arquivo para o stdout que você canaliza para outro programa (md5sum) e a indicação de progresso é enviada através do stderr. Embora só seja realmente bom para um arquivo de cada vez. Use como pv /usb1/bigfile1 | md5sum

    
por 08.07.2017 / 12:40