2011-10-18 11 views
5

Estoy tratando de usar la coincidencia de patrones para encontrar todos los archivos dentro de un directorio que tenga una extensión de .jpg o jpeg.Bash Pattern Matching

ls *.[jJ][pP][eE][gG] < - Obviamente, solo encontrará la extensión de archivo .jpeg. La pregunta es, ¿cómo puedo hacer que el [eE sea opcional?

Respuesta

6

Unir más duro.

ls *.[jJ][pP]{[eE],}[gG] 
+0

Muchas gracias, eso es exactamente lo que estaba buscando :) – Elliot

2

Además de los patrones (simple) glob estándar, ≥4.0 golpe ha extendido englobamiento.
Es off by default. Para activarlo, utilice: shopt -s extglob

Con extglob tiene acceso a los patrones de expresiones regulares extendidos, así como a los patrones estándar. Además, en su situación particular, puede adaptar el comportamiento de su glob aún más al habilitar case insensitive glob, que también está desactivado por defecto. Para activarlo, use: shopt -s nocaseglob

La habilitación de extglob no altera la manera en que funcionan los globs estándar. Puedes mezclar las dos formas. El único problema es que debe tener en cuenta la sintaxis especial de expresiones regulares extendidas. Por ejemplo, en el siguiente ejemplo, la única parte de ella que es una expresión regular extendida es ?(e). El resto es una expansión glob estándar, con insensibilidad de mayúsculas y minúsculas habilitada.

El extendida en expresiones regulares, glob entre mayúsculas y minúsculas para su situación es:

shopt -s extglob nocaseglob 
ls -l *.jp?(e)g 

usted puede encontrar más información y ejemplos en: Bash Extended Globbing.

+0

En realidad, Bash obtuvo globbing extendido en bash-2.02-alpha1 (es decir, hace un tiempo _along - como 15 años). Si se activa o desactiva de manera predeterminada, se puede elegir cuando se ejecuta './Configure' (es decir, antes de la compilación). De hecho, la versión en la que se introdujo se muestra en el enlace que proporcionó para su configuración predeterminada. –