O redirecionamento e a tubulação de E / S são funções de shells (por exemplo, bash). Observando o código-fonte do comando find
( link ), a opção -exec
é forjada e executa diretamente o dado comando, ele não o envia através de qualquer shell. Dado que, sem ajuda, você não pode incluir tubulação e redirecionamento no argumento para find
.
Você pode, no entanto, ter find
invocar um shell e fazer com que esse shell, por sua vez, invoque seu comando. Ao executar o mesmo através de um shell, você tem acesso às operações de redirecionamento de E / S expostas pelo shell. Considere, por exemplo:
find . -type f -exec bash -c 'ls -l $0 >> /tmp/result' {} \;
Isso executará ls -l
em cada arquivo encontrado por find
(o shell refere-se a esse arquivo neste contexto como $0
) e redirecionará a saída para /tmp/result
. Observe que usei >>
em vez de >
. Aqui, find está chamando um shell para cada arquivo, então >
resultará em cada resultado sobrescrevendo o anterior - você terminará com um arquivo que contém apenas a saída do último comando.
O Pipes funcionará também, com a mesma limitação de "um exec por arquivo".
find . -type f -exec bash -c "ls -l $0 | grep something" {} \;
Tudo o que foi dito, não está imediatamente claro para mim por que você deseja aplicar o redirecionamento dentro do contexto do -exec
, ou o que você compraria ao executar o redirecionamento na saída de encontrar-se.