Saída do comando quando canalizado para outro comando

2

Estou executando um comando que faz uma soma de verificação rápida de alguns arquivos, como

find / -type f -ctime +30 -mtime +30 -atime +30 -exec md5sum {} \; | xargs -P 4

e estou tentando executá-lo em paralelo com

xargs -P 4

Agora, quando executo o comando find, por si só, vejo a saída à medida que cada arquivo está sendo verificado. Mas quando eu canalizo para xargs, não vejo mais a saída do comando find.

Existe uma maneira que eu possa ver a saída de encontrar quando é canalizada para outro comando?

    
por user2840647 01.05.2014 / 02:35

2 respostas

6

Você quer isso:

find / -type f -ctime +30 -mtime +30 -atime +30 -print0 | xargs -0 -P 4 md5sum

Você deseja que a lista de arquivos seja alimentada no comando md5sum. Isso é feito com find / | xargs md5sum . Então você não precisa se preocupar com caracteres malucos (espaços, novas linhas, seja qual for) em nomes de arquivos, então usamos -print0 para find e -0 para xargs.

    
por 01.05.2014 / 02:49
4

Eu tomei seu comando,

$ find / -type f -ctime +30 -mtime +30 -atime +30 -exec md5sum {} \; | xargs -P 4

E imaginamos que queremos redirecionar, enquanto ainda ecoamos para stdout. Uma maneira de fazer isso é com tee

$ man tee | head
NAME
   tee - read from standard input and write to standard output and files

Então, o tee definitivamente irá gravar no stdout (que é o que precisamos para continuar a cadeia), e também escrever em um arquivo de nossa escolha. Ótimo! Mas qual arquivo?

Graças a essa resposta para a ideia link , podemos usar

/dev/tty

para o nosso redirecionamento, e ele será impresso no nosso console!

Então, para o comando completo:

$ find / -type f -ctime +30 -mtime +30 -atime +30 -exec md5sum {} \; | tee /dev/tty | xargs -P 4

Eu começo a ver um ótimo texto rolando na tela enquanto faço isso:)

    
por 01.05.2014 / 02:57