Como posso fazer uma pesquisa "ou" com find?

Como posso fazer uma pesquisa "ou" com find?

Essencialmente, quero saber como executar 2 (ou mais) comandos find em um - uma pesquisa "ou" em vez de um "e":

find . -name "*.pem"
find . -name "*.crt"

Responder1

findO operador “ou” de é -o:

find . -name "*.pem" -o -name "*.crt"

Está em curto-circuito,ou sejaa segunda parte só será avaliada se a primeira parte for falsa: um arquivo que corresponda *.pemnão será testado *.crt.

-otem precedência menor que “e”, seja explícito ( -a) ou implícito; se você estiver combinando operadores, talvez seja necessário colocar a parte “ou” entre parênteses:

find . \( -name "*.pem" -o -name "*.crt" \) -print

Em meus testes, isso é significativamente mais rápido do que usar uma expressão regular, como você poderia esperar (expressões regulares são mais caras para testar do que globs e -regextestam o caminho completo, não apenas o nome do arquivo -name).

Responder2

Enquanto eu estava digitando esta pergunta, ocorreu-me que find usa globbing em vez de regex por padrão. Mas aposto que existe uma maneira de usar regex!

Com certeza ... tive que alterar o regextype para usar o posix-extended, mas isso me deu o que eu queria.

find . -regextype posix-extended -regex ".*pem|.*crt"

Qaplah!

informação relacionada