Ich kann alle jpg Bilder abrufen, indem ich Folgendes verwende:

find . -name "*.jpg" 

Aber wie kann ich den Ergebnissen auch png -Dateien hinzufügen?

Kommentare

Antwort

Verwenden Sie das Flag -o zwischen verschiedenen Parametern.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) funktioniert wie ein Zauber.

HINWEIS Zwischen der Klammer und ihrem Inhalt muss ein Leerzeichen stehen es wird nicht funktionieren.

Erläuterung:

  • -type f – nur nach Dateien suchen (keine Verzeichnisse)
  • \( & \) – werden benötigt, damit das -type f auf alle Argumente angewendet wird.
  • -o – logisches ODER Operator
  • -iname – wie -name, aber die Übereinstimmung unterscheidet nicht zwischen Groß- und Kleinschreibung

Kommentare

  • Benötigen Sie die Klammern? Der Befehl funktioniert für mich ohne sie. Werden sie für einige Shells benötigt?
  • @miked Der Befehl " funktioniert " ohne sie, ja, aber Sie ' erhalten Treffer in Verzeichnissen, die mit .png enden, sowie in Dateien, die mit .jpg enden, was nicht genau beabsichtigt ist.
  • Danke fürs klarstellen! Die type -f wird nicht erweitert und gilt nicht für beide Ausdrücke ohne die Klammern. find ./ -type f -iname \*.jpg -o -type f -iname \*.png funktioniert also auch … obwohl es ' ist zwei Zeichen länger 🙂
  • Es ' ist eine Frage der Priorität des Operators. Genau wie a * b + c sich von a * (b + c)
  • @jdhao unterscheidet. Guter Fang, geändert.

Antwort

Sie können Kriterien mit -o als vorgeschlagen von Shadur . Beachten Sie, dass -o eine niedrigere Priorität als das Nebeneinander hat, sodass Sie möglicherweise Klammern benötigen.

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 dies Verwenden Sie -regex, um Erweiterungen auf engere Weise zu kombinieren. Die Standard-Regexp-Syntax lautet Emacs ( grundlegende Regexps sowie einige Erweiterungen wie \| zur Abwechslung). Es gibt eine Option zum Wechseln zu erweiterten regulären Ausdrücken .

find -regex ".*\.\(jpg\|png\)" find -regextype posix-extended -regex ".*\.(jpg|png)" 

Unter FreeBSD, NetBSD und OSX können Sie -regex in Kombination mit -E für erweiterte reguläre Ausdrücke verwenden.

find -E . -regex ".*\.(jpg|png)" 

Kommentare

  • ' ist immer besser, -iname statt -name – dann erfassen Sie auch image.JPG und image.PnG

Antwort

Dies ist korrekter:

find . -iregex ".*\.\(jpg\|gif\|png\|jpeg\)$" 

Kommentare

  • Warum ist " mehr " korrekt?
  • @ Kevin Ich denke, weil -iregex mit jpg sowie JPG Jpg jpG und so. Ich denke, die $ wird nicht ' benötigt .
  • Dies funktioniert gut bei MinGW .
  • Zuerst haben Sie den Suchordner als erstes Argument weggelassen, das ausgelöst wird ein Fehler. Zweitens funktioniert das Entkommen der Klammer unter OSX nicht, und dies sollte stattdessen verwendet werden: find -E . -iregex '.*\.(jpg|png|gif)' wie in der Antwort von @sorin ' gezeigt.

Antwort

Um es klar zu machen, ist die einzige Option, die unter Linux, Unix und MacOS funktioniert:

find -E . -regex ".*\.(jpg|png)" 

Das liegt daran, dass die OS X-Version etwas anders ist, aber das ist wichtig, um Dinge zu schreiben, die auf den meisten Plattformen gut funktionieren.

Kommentare

  • -E-Flag ist für die Suche unter Ubuntu 14.04 nicht gültig.
  • Das -E-Flag ist für MinGW (zumindest die Version / Konfiguration, an der ich es ausprobiert habe (Standardkonfiguration für eine bestimmte Version)).
  • Welcher Teil von -type f \( -iname \*.png -o -iname \*.jpg\) funktioniert unter OSX nicht?
  • Kann bestätigen, dass -type f \( -iname \*.png -o -iname \*.jpg\) unter OSX

Antwort

/\.(jpe?g|png|gif|bmp)$/i; 

Verwenden Sie es.

Kommentar s

  • Möglicherweise müssen Sie dies ein wenig erklären.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.