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.