Usar buscar para localizar archivos que coincidan con uno de varios patrones

Resuelto Xiong Chiamiov asked hace 15 años • 12 respuestas

Estaba intentando obtener una lista de todos los archivos Python y HTML en un directorio con el comandofind Documents -name "*.{py,html}" .

Luego apareció la página de manual:

Las llaves dentro del patrón ('{}') no se consideran especiales (es decir, find . -name 'foo{1,2}' coincide con un archivo llamado foo{1,2}, no con los archivos foo1 y foo2.

Como esto es parte de una cadena de tuberías, me gustaría poder especificar con qué extensiones coincide en tiempo de ejecución (sin codificación). Si find simplemente no puede hacerlo, una frase de Perl (o similar) estaría bien.

Editar: La respuesta que finalmente se me ocurrió incluye todo tipo de basura y también es un poco larga, así que la publiqué como una respuesta a la picazón original que estaba tratando de aliviar. Siéntete libre de modificarlo si tienes mejores soluciones.

Xiong Chiamiov avatar Jul 16 '09 03:07 Xiong Chiamiov
Aceptado

Utilice -o, que significa "o":

find Documents \( -name "*.py" -o -name "*.html" \)

Necesitarías crear esa línea de comando mediante programación, lo cual no es tan fácil.

¿Estás usando bash (o Cygwin en Windows)? Si es así, deberías poder hacer esto:

ls **/*.py **/*.html

que podría ser más fácil de construir mediante programación.

RichieHindle avatar Jul 15 '2009 20:07 RichieHindle

Algunas ediciones de find, principalmente en sistemas Linux, posiblemente en otras también admiten las opciones -regex y -regextype, que buscan archivos con nombres que coincidan con la expresión regular.

Por ejemplo

find . -regextype posix-egrep -regex ".*\.(py|html)$" 

debería hacer el truco en el ejemplo anterior. Sin embargo, esta no es una función de búsqueda POSIX estándar y depende de la implementación.

intelekt avatar Jan 23 '2012 10:01 intelekt