¿Cómo puedo hacer una búsqueda "o" con find?

¿Cómo puedo hacer una búsqueda "o" con find?

Básicamente, quiero saber cómo ejecutar 2 (o más) comandos de búsqueda en uno: una búsqueda "o" en lugar de "y":

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

Respuesta1

findEl operador “o” es -o:

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

Está en cortocircuito,es decirla segunda parte solo se evaluará si la primera parte es falsa: un archivo que coincida *.pemno se probará con *.crt.

-otiene menor precedencia que “y”, ya sea explícito ( -a) o implícito; Si combina operadores, es posible que deba encerrar la parte "o" entre paréntesis:

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

En mis pruebas, esto es significativamente más rápido que usar una expresión regular, como era de esperar (las expresiones regulares son más costosas de probar que los globos y -regexprueban la ruta completa, no solo el nombre del archivo -name).

Respuesta2

Mientras escribía esta pregunta, se me ocurrió que buscar usa globbing en lugar de expresiones regulares de forma predeterminada. ¡Pero apuesto a que hay una manera de usar expresiones regulares!

Efectivamente...tuve que cambiar el tipo regular para usar posix-extended pero eso me dio lo que quería.

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

¡Qapla!

información relacionada