Antworten:
Verwenden Sie das -oFlag 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 -fnicht erweitern und gelten für beide Ausdrücke ohne die Klammern, also find ./ -type f -iname \*.jpg -o -type f -iname \*.pngfunktioniert auch ... obwohl es zwei Zeichen länger ist :-)
a * b + cist anders alsa * (b + c)
Sie können Kriterien kombinieren mit -owie von Shadur vorgeschlagen . Beachten Sie, dass dies -oeine 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 -regexErweiterungen 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 -regexkombiniert mit -Efür erweiterte reguläre Ausdrücke verwenden.
find -E . -regex '.*\.(jpg|png)'
-inameanstatt -name- dann werden Sie auch erfassen image.JPGundimage.PnG
Das ist richtiger:
find . -iregex '.*\.\(jpg\|gif\|png\|jpeg\)$'
-iregexpasst jpgauch so JPG Jpg jpGund 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