Antworten:
Verwenden Sie das -o
Flag zwischen verschiedenen Parametern.
find ./ -type f \( -iname \*.jpg -o -iname \*.png \)
klappt wunderbar.
HINWEIS Es muss ein Raum zwischen der Halterung und dessen Inhalt oder es wird nicht funktionieren.
Erläuterung:
type -f
- nur nach Dateien suchen (nicht nach Verzeichnissen)\(
- Wird benötigt type -f
, damit alle Argumente berücksichtigt werden-o
- logischer ODER-Operator-iname
- wie -name
, aber die Groß- und Kleinschreibung spielt keine Rolletype -f
nicht erweitern und gelten für beide Ausdrücke ohne die Klammern, also find ./ -type f -iname \*.jpg -o -type f -iname \*.png
funktioniert auch ... obwohl es zwei Zeichen länger ist :-)
a * b + c
ist anders alsa * (b + c)
Sie können Kriterien kombinieren mit -o
wie von Shadur vorgeschlagen . Beachten Sie, dass dies -o
eine niedrigere Priorität hat als die Gegenüberstellung, sodass möglicherweise Klammern erforderlich sind.
find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( '*.jpg' -o -name '*.png' \) # all .jpg or .png images modified in the past week
Unter Linux können Sie -regex
Erweiterungen enger zusammenfassen. Die Standard-Syntax für reguläre Ausdrücke ist Emacs ( einfache reguläre Ausdrücke plus einige Erweiterungen, z. B. \|
für die Abwechslung). Es gibt eine Option, um zu erweiterten regulären Ausdrücken zu wechseln .
find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'
Unter FreeBSD, NetBSD und OSX können Sie -regex
kombiniert mit -E
für erweiterte reguläre Ausdrücke verwenden.
find -E . -regex '.*\.(jpg|png)'
-iname
anstatt -name
- dann werden Sie auch erfassen image.JPG
undimage.PnG
Das ist richtiger:
find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'
-iregex
passt jpg
auch so JPG Jpg jpG
und so. Ich denke das $
wird nicht benötigt.
find -E . -iregex '.*\.(jpg|png|gif)'
wie in der Antwort von @ sorin gezeigt.
Die einzige Option, die unter Linux, Unix und MacOS funktioniert, ist:
find -E . -regex '.*\.(jpg|png)'
Das liegt daran, dass die OS X-Version ein bisschen anders ist, aber das ist wichtig, um Dinge zu schreiben, die auf den meisten Plattformen gut funktionieren.
-type f \( -iname \*.png -o -iname \*.jpg\)
funktioniert nicht unter OSX?
find -name