;
é 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' -- {} \;