2011-10-18 16 views
5

Próbuję użyć dopasowywania wzorca, aby znaleźć wszystkie pliki w katalogu, który ma rozszerzenie .jpg lub jpeg.Dopasowanie wzorca bash

ls *.[jJ][pP][eE][gG] < - to oczywiście tylko znajdzie rozszerzenie pliku .jpeg. Pytanie brzmi, w jaki sposób mogę opcjonalnie ustawić [eE?

Odpowiedz

6

Dopasuj mocniej.

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

Bardzo dziękuję, właśnie tego szukałem :) – Elliot

2

również standardowe wzorce (proste) glob, atakujących ≥4.0 jest przedłużony globowania. Jest to
. Aby go włączyć, użyj: shopt -s extglob

Dzięki extglob masz dostęp do rozszerzonych wzorów regularnych wyrażeń, jak również standardowych wzorów. Ponadto w swojej konkretnej sytuacji możesz jeszcze bardziej dostosować zachowanie globu, włączając opcję case insensitive glob, która jest domyślnie wyłączona. Aby go włączyć, użyj: shopt -s nocaseglob

Włączenie extglob nie zmienia sposobu działania standardowych globów. Możesz mieszać te dwa formularze. Jedynym problemem jest to, że musisz zdawać sobie sprawę ze specjalnej rozszerzonej składni regex. Na przykład w poniższym przykładzie jedyną jego częścią, która jest rozszerzonym wyrażeniem regularnym, jest ?(e). Reszta to standardowa ekspansja globalna z włączoną niewrażliwością na wielkość liter.

Rozszerzony-regex, wielkość liter glob w danej sytuacji jest:

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

można znaleźć więcej informacji i przykładów w: Bash Extended Globbing.

+0

W rzeczywistości Bash dostał przedłużony globbing w bash-2.02-alpha1 (tj. _long_czas temu - jak 15 lat). Domyślnie włączone lub wyłączone można wybrać, gdy uruchamiane jest './Configure' (przed kompilacją). W rzeczywistości wersja, w której została wprowadzona, jest wyświetlana pod linkiem podanym dla domyślnego ustawienia. –

Powiązane problemy