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.