
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
find
El 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 *.pem
no se probará con *.crt
.
-o
tiene 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 -regex
prueban 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!