Antworten:
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
wird funktionieren. Es könnte einen eleganteren Weg geben.
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.
-E
Option weist find
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, wird find
die Groß- und Kleinschreibung nicht berücksichtigt.
find /path/to/ -type f -print0 | xargs -0 file | grep -i image
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ä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/
find /path -type f \( -iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \)
-iname *.jpg
, -o -name *.jpeg
, -o -iname *gif
Haben alle ein etwas anderes Format.
Falls Dateien keine Erweiterung haben, können wir nach dem Dateimimetyp suchen
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }'
Dabei (Audio | Video | Matroska | MPEG) sind MIME-Typen Regex
& wenn du sie löschen willst:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 ~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
oder löschen Sie alles andere als diese Erweiterungen:
find . -type f -exec file -i {} + | awk -F': +' '{ if ($2 !~ /audio|video|matroska|mpeg/) print $1 }' | while read f ; do
rm "$f"
done
beachte das! ~ statt ~