2011-10-18 16 views
5

Sto cercando di utilizzare la corrispondenza dei modelli per trovare tutti i file all'interno di una directory che hanno un'estensione di .jpg o jpeg.Corrispondenza modello Bash

ls *.[jJ][pP][eE][gG] < - questo ovviamente troverà solo l'estensione del file .jpeg. La domanda è: come posso rendere lo [eE opzionale?

risposta

6

Partita più difficile.

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

Grazie mille, questo è esattamente quello che stavo cercando :) – Elliot

2

Oltre alle normali modelli (semplice) glob, bash ≥4.0 ha esteso globbing.
È off by default. Per accenderlo, utilizzare: shopt -s extglob

Con extglob si ha accesso ai modelli di espressioni regolari estesi e ai modelli standard. Inoltre, nella tua situazione particolare, puoi personalizzare ulteriormente il comportamento del tuo glob abilitando uno case insensitive glob, anch'esso spento per impostazione predefinita. Per attivarlo, utilizzare: shopt -s nocaseglob

L'abilitazione di extglob non altera il funzionamento dei glob standard. Puoi mescolare le due forme. L'unico problema è che devi essere consapevole della speciale sintassi regex estesa. ad esempio, nell'esempio seguente, l'unica parte di esso che è un'espressione regolare estesa, è ?(e). Il resto è espansione standard di glob, con l'insensibilità alle maiuscole e minuscole abilitata.

il soggiorno prolungato, regex, glob maiuscole e minuscole per la vostra situazione è:

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

è possibile trovare maggiori informazioni ed esempi a: Bash Extended Globbing.

+0

In realtà, Bash è stato esteso in globi in bash-2.02-alpha1 (vale a dire molto tempo fa - come 15 anni). Se è attivo o disattivato di default può essere scelto quando viene eseguito './Configure' (cioè prima della compilazione). In effetti la versione in cui è stata introdotta è mostrata nel link che hai fornito per le sue impostazioni predefinite. –

Problemi correlati