Eu gostaria de entender como enviar corretamente a saída de um comando find + exec para um pipeline para processamento adicional.
i.e. como podemos nós
(1) selecione um arquivo de grupo
(2) executar alguma operação no grupo via exec e
(3) usar a saída dessa operação como entrada para 1 ou mais filtros em um pipeline
Por exemplo, quando tento filtrar um comando find + exec como esse, vejo muitos erros 'terminados por sinal 13' para as linhas que eu filtrava.
$ find c* -name "*.jpg" -exec ls {} \; | head
c0/1467058201899.jpg
c0/1465854461118.jpg
c0/1465855196637.jpg
c0/1467050962421.jpg
c0/1465856476225.jpg
c0/1467050385287.jpg
c0/1465853696999.jpg
c0/1467144293032.jpg
c0/1467051637981.jpg
c0/1465841226352.jpg
find: 'ls' terminated by signal 13
find: 'ls' terminated by signal 13
find: 'ls' terminated by signal 13
...
Eu posso fazer com que esse erro particular desapareça, mas isso não parece muito elegante.
$ find c* -name "*.jpg" -exec ls {} \; -print 2>/dev/null | head
c0/1467058201899.jpg
c0/1467058201899.jpg
c0/1465854461118.jpg
c0/1465854461118.jpg
c0/1465855196637.jpg
c0/1465855196637.jpg
c0/1467050962421.jpg
c0/1467050962421.jpg
c0/1465856476225.jpg
c0/1465856476225.jpg
Existe uma maneira mais elegante de fazer isso para o caso geral de find + exec, em que o comando executado pode variar?
UPDATE
usando xargs ainda parece gerar saída para stderr ...
$ find c* -name "*.jpg" -print0 | xargs -0 ls | head
c0/1465425913832.jpg
c0/1465425968779.jpg
c0/1465426112741.jpg
c0/1465426116540.jpg
c0/1465426121623.jpg
c0/1465426127656.jpg
c0/1465426133584.jpg
c0/1465426140097.jpg
c0/1465426143185.jpg
c0/1465426156715.jpg
xargs: ls: terminated by signal 13
usando find + exec terminando com + ao invés de; também gera saída para stderr ...
$ find c* -name "*.jpg" -exec ls {} \+ | head
c0/1465425913832.jpg
c0/1465425968779.jpg
c0/1465426112741.jpg
c0/1465426116540.jpg
c0/1465426121623.jpg
c0/1465426127656.jpg
c0/1465426133584.jpg
c0/1465426140097.jpg
c0/1465426143185.jpg
c0/1465426156715.jpg
find: 'ls' terminated by signal 13
find: 'ls' terminated by signal 13
embora adicionar "-print 2 > / dev / null" a este comando resulte em um comando que executa muito rapidamente ...
$ find c* -name "*.jpg" -exec ls {} \+ -print 2>/dev/null | head
c0/1467058201899.jpg
c0/1465854461118.jpg
c0/1465855196637.jpg
c0/1467050962421.jpg
c0/1465856476225.jpg
c0/1467050385287.jpg
c0/1465853696999.jpg
c0/1467144293032.jpg
c0/1467051637981.jpg
c0/1465841226352.jpg