Mogę uzyskać wszystkie jpg
obrazy, używając:
find . -name "*.jpg"
Ale jak mogę również dodawać png
pliki do wyników?
find
regular-expression
wong2
źródło
źródło
find -name
wzór pasujący do wielu wzorów w SOOdpowiedzi:
Użyj
-o
flagi między różnymi parametrami.find ./ -type f \( -iname \*.jpg -o -iname \*.png \)
działa jak marzenie.UWAGA Pomiędzy wspornikiem a jego zawartością musi być odstęp, aby nie działał.
Wyjaśnienie:
type -f
- szukaj tylko plików (nie katalogów)\(
- potrzebnetype -f
do zastosowania do wszystkich argumentów-o
- logiczny operator OR-iname
- jak-name
, ale dopasowanie nie uwzględnia wielkości literźródło
type -f
Nie rozciąga się i stosować do obu wyrażeń bez nawiasów, więcfind ./ -type f -iname \*.jpg -o -type f -iname \*.png
działa także ... chociaż to dwa znaki już :-)a * b + c
różni się oda * (b + c)
Można łączyć z kryteriów
-o
jak sugeruje Shadur . Zauważ, że-o
ma niższy priorytet niż zestawianie, więc możesz potrzebować nawiasów.W systemie Linux można
-regex
łączyć rozszerzenia w bardziej uproszczony sposób. Domyślna składnia wyrażeń regularnych to Emacs ( podstawowe wyrażenia regularne plus kilka rozszerzeń, takich jak\|
na przemian); istnieje opcja przejścia na rozszerzone wyrażenia regularne .W FreeBSD, NetBSD i OSX można używać w
-regex
połączeniu z-E
rozszerzonymi wyrażeniami regularnymi.źródło
-iname
zamiast-name
- wtedy również przechwyciszimage.JPG
iimage.PnG
Jest to bardziej poprawne:
źródło
-iregex
meczejpg
sąJPG Jpg jpG
takie same . Myślę, że$
to nie jest potrzebne.find -E . -iregex '.*\.(jpg|png|gif)'
jak pokazano w odpowiedzi @ sorin.Aby to wyjaśnić, jedyną opcją, która działa w systemach Linux, Unix i macOS jest:
Jest tak, ponieważ wersja OS X jest nieco inna, ale ważne jest, aby pisać rzeczy, które dobrze pasują na większości platform.
źródło
-type f \( -iname \*.png -o -iname \*.jpg\)
nie działa na OSX?Użyj tego.
źródło