; é o separador de comandos do shell . Tudo após ele será um comando separado e não será passado para find , já que a análise de comando é feita antes da execução. Da mesma forma, &>/dev/null aplica-se ao comando inteiro find , não apenas a php , independentemente de onde esteja localizado (antes, no meio ou depois ).
Para usar esses operadores em -exec ou -ok , você terá que chamar explicitamente um shell:
find ... -exec bash -c 'php -l "{}" >&/dev/null; echo $?' \;
Observe que os caracteres especiais estão entre aspas, o que significa que eles serão transmitidos literalmente para find e, em seguida, para bash .
Isso é menos simples, mas pode ser mais confiável com nomes de arquivos "estranhos":
find ... -exec bash -c 'php -l "$1" >&/dev/null; echo $?' -- {} \;
Isso exibirá os resultados de uma forma mais legível: (isso é totalmente sobre bash scripting agora, não sobre find anymore)
find ... -exec bash -c '
if php -l "$1" >&/dev/null; then
echo "$1: pass"
else
echo "$1: fail"
fi' -- {} \;