Note que o POSIX find suporta opções como outros comandos e -- para marcar o final deles como outros comandos. Esses são -H e -L .
As -print , -type ... não são opções, às vezes são chamadas de predicados . Eles são argumentos cuja ordem é importante que apareçam depois dos caminhos de arquivos que aparecem após as opções. Você também tem ( e ! . Juntos, eles criam uma expressão que é usada para determinar quais arquivos encontrar.
find não é o único. [ (também conhecido como test ) e expr são outros comandos cujos argumentos são usados para criar uma expressão .
Como find , [ tem operadores que começam com - e são mais de uma letra ( -gt , -eq ...).
Como find , test tem problemas onde os operadores podem ser confundidos com operandos .
find -- "$file1" "$file2" -type f
[ -f "$file1" -a -f "$file2" ]
Se $file2 for ! , é um problema com find . Se for = , é um problema com (alguns) [ .
Para todos os find , test e expr , o uso das opções para criar a expressão não teria funcionado. Outra opção poderia ter sido ter uma string avaliada como a expressão como awk ou sed . como para
find f1 f2 \( -type f -mtime -1 -o ! -type f -newer x \) -exec ls -ld {} +
Faça:
find 'found = 0
if (typeof($f) == "f") {
if (age($f) > 1) found=1
} else if (age($f) < age("x")) found = 1
if ($found) exec_multi("ls -ld {}")' f1 f2
Mas isso significa implementar um analisador gramatical em find . Isso também significa um pesadelo de cotação em potencial para o "x" e a linha de comando acima.
Na verdade, a AT & T Research criou esse comando: tw (andador de árvores), mas apesar de agora ser de código aberto, não sei se ele é realmente usado fora da AT & T.