
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
find
O 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 *.pem
não será testado *.crt
.
-o
tem 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 -regex
testam 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!