Estou escrevendo um script que determina se find
oferece suporte às seguintes primárias:
- iregex
- Bhora
- um tempo
- inum com +/-
Até agora, eu descobri isso:
find / -mindepth 0 -maxdepth 1 -inum +0 -exec echo "ok:inum+-" \; 2>&1 | head -n 1
Deve gerar "ok:inum+-" somente se esse primário for compreendido pelo comando.
O problema com isso é que confio em encontrar correspondências, caso contrário não produzirá nada.
Idealmente, o primário testado não deve importar o que encontra, e o eco deve sempre ser executado, a menos que a ferramenta seja abortada com um erro.
Sei que poderia deixar de lado -exec echo …
e verificar o código de saída da find
invocação, mas como imprimiria a string "ok:" dependendo disso?
Ah, e qualquer solução precisa ser de uma linha por primário testado.
Você pode detectar a presença de qualquer coisa no stderr:
Então:
Cuidado, pois existem predicados que alguns
find
suportam, mas de formas incompatíveis entre eles.Por exemplo,
-regex
espera regexps básicos no BSDfind
por padrão, enquanto o GNUfind
espera um sabor de regex de alguma versão antiga doemacs
.A interpretação dos sufixos em
-mtime
/-size
também varia entre as implementações.Além disso, o acima não pode ser usado para testar
-depth
//-delete
,-mindepth
pois entra em conflito com-prune
.-depth
é padrão e as implementações que-maxdepth
também possuem-mindepth
.