Finde alle animierten GIF-Dateien in einem Verzeichnis und seinen Unterverzeichnissen

12

Nehmen wir an, ich habe nach .gifDateien gesucht und ein paar Dateien zurückbekommen. Ich möchte sie jetzt testen, um zu sehen, ob es sich um animierte Gifs handelt. Kann ich das über die Kommandozeile machen?

Ich habe im Folgenden einige Beispiele hochgeladen, falls Sie damit experimentieren möchten.

Animiertes GIF-Bild

animiertes gif bild

Statisches GIF-Bild

statisches gif bild

Max Williams
quelle

Antworten:

22

Dies ist mit ImageMagick problemlos möglich

identify -format '%n %i\n' -- *.gif

12 animated.gif
1 non_animated.gif

identify -format %ndruckt die Anzahl der Bilder im GIF; Bei animierten Gifs ist diese Zahl größer als 1.

(ImageMagick ist wahrscheinlich für eine einfache Installation in den Repositorys Ihrer Distribution verfügbar.)

Walther
quelle
Perfekt, danke - ich habe ImageMagick bereits installiert.
Max Williams
9

Verwenden von exiftool:

exiftool -q -if '$framecount > 1' -p '$directory/$filename' -r -ext:gif .

Würde die Pfade der GIF-Dateien melden, die mehr als einen Frame haben (im aktuellen Verzeichnis, rekursiv).

Stéphane Chazelas
quelle
5

Ein anderer Weg mit imdem fxOperator:

find . -type f -name \*.gif -exec sh -c \
'identify -format "%[fx:n>1]\n" "$0" | grep -q 1' {} \; -print

Dadurch werden das aktuelle Verzeichnis und seine Unterverzeichnisse nach .gifBildern durchsucht , in denen dieser Shell-Befehl für jedes .gifgefundene ausgeführt wird. Wenn die Anzahl der Bilder n>1dann fxgedruckt wird 1, wird andernfalls gedruckt 0. Dies wird zum Ausleiten grep -q 1so -printwird nur ausgeführt , wenn der vorherige -execerfolgreich war.

don_crissti
quelle