Funktioniert bei Mac nicht, funktioniert aber mit der Option -E (erweitert) (möglicherweise ist die Pipe eine erweiterte Funktion?): Find -E / path / to -iregex ". * \. (Jpg | gif | png | jpeg)“> log
-iname würde Groß- und Kleinschreibung nicht berücksichtigen
Chris Koston
1
@Gerald: Es ist wahrscheinlich, dass Sie Ihren ODER-Ausdruck in Klammern gruppieren müssen. find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;Andernfalls gilt die Ausführung nur für den letzten Teil ( -iname '*.jpg' in diesem Fall).
Bis auf weiteres angehalten.
Das ist eine wichtige Bemerkung. find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0druckt nur die JPG-Dateien! Sie benötigen hier Klammern:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
Hmmm, die -EOption weist findan, "erweiterte reguläre Ausdrücke" zu verwenden. Einige andere Tools haben eine ähnliche Option, aber ich bin nicht sicher, ob diese Option auf allen UNIX-Distributionen verfügbar ist.
tboyce12
8
Funktioniert auch unter Mac OS.
c.gutierrez
2
@ tboyce12 Unter Ubuntu kann ich den -regextype angeben, um den Regex-Ausdruck zu vereinfachen : find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)".
Doub1ejack
1
@cjm Vielleicht find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log. Wenn Sie das -iregexFlag verwenden, wird finddie Groß- und Kleinschreibung nicht berücksichtigt.
Mit diesem fileBefehl wird versucht, den Dateityp unabhängig vom Dateinamen (oder der Erweiterung) zu erkennen.
Wenn /path/tooder ein Dateiname die Zeichenfolge enthält image, kann das oben Gesagte falsche Treffer zurückgeben. In diesem Fall würde ich vorschlagen
cd /path/to
find .-type f -print0 | xargs -0 file --mime-type | grep -i image/
Können Sie erklären, warum Sie die (maskierten) Klammern um die Parameter name / iname hinzugefügt haben?
Bart Kleijngeld
Gibt es einen Grund für die Inkonsistenz? -iname *.jpg, -o -name *.jpeg, -o -iname *gifHaben alle ein etwas anderes Format.
Verlassener Wagen
wenn Sie zumindest Unterschiede mit anderen Antworten erklären könnten.
El-Teedee
6
Als Ergänzung zu der obigen Antwort von @Dennis Williamson verwenden Sie -iregex, wenn Sie möchten, dass derselbe reguläre Ausdruck bei Groß- und Kleinschreibung für die Dateierweiterungen nicht berücksichtigt wird:
wird funktionieren. Es könnte einen eleganteren Weg geben.
quelle
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;
Andernfalls gilt die Ausführung nur für den letzten Teil (-iname '*.jpg'
in diesem Fall).find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0
druckt nur die JPG-Dateien! Sie benötigen hier Klammern:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
Das
-E
erspart Ihnen die Flucht vor den Parens und Pfeifen in Ihrer Regex.quelle
-E
Option weistfind
an, "erweiterte reguläre Ausdrücke" zu verwenden. Einige andere Tools haben eine ähnliche Option, aber ich bin nicht sicher, ob diese Option auf allen UNIX-Distributionen verfügbar ist.find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
.find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log
. Wenn Sie das-iregex
Flag verwenden, wirdfind
die Groß- und Kleinschreibung nicht berücksichtigt.Mit diesem
file
Befehl wird versucht, den Dateityp unabhängig vom Dateinamen (oder der Erweiterung) zu erkennen.Wenn
/path/to
oder ein Dateiname die Zeichenfolge enthältimage
, kann das oben Gesagte falsche Treffer zurückgeben. In diesem Fall würde ich vorschlagenquelle
quelle
-iname *.jpg
,-o -name *.jpeg
,-o -iname *gif
Haben alle ein etwas anderes Format.Als Ergänzung zu der obigen Antwort von @Dennis Williamson verwenden Sie -iregex, wenn Sie möchten, dass derselbe reguläre Ausdruck bei Groß- und Kleinschreibung für die Dateierweiterungen nicht berücksichtigt wird:
quelle
Unter Mac OS verwenden
quelle
quelle
Falls Dateien keine Erweiterung haben, können wir nach dem Dateimimetyp suchen
Dabei (Audio | Video | Matroska | MPEG) sind MIME-Typen Regex
& wenn du sie löschen willst:
oder löschen Sie alles andere als diese Erweiterungen:
beachte das! ~ statt ~
quelle