Wie analysiert man die Ausgabe, um zu sehen, ob eine Zeichenfolge übereinstimmt?

Wie analysiert man die Ausgabe, um zu sehen, ob eine Zeichenfolge übereinstimmt?

Herausforderung: Ich muss die Ausgabe des „identify“-Befehls von Imagemagick analysieren, um das Vorhandensein einer bestimmten Zeichenfolge zu erkennen. Wenn sie nicht vorhanden ist, gebe ich den Dateinamen auf dem Bildschirm aus.

Hintergrund: Ich habe ungefähr 100.000 Miniaturbilder (Beispiel-Miniaturbild, das analysiert werden muss). Ich muss jedes Miniaturbild überprüfen, um sicherzustellen, dass es richtig gerendert wurde. Glücklicherweise kann „richtig gerendert“ durch das Vorhandensein roter Pixel im Miniaturbild bestimmt werden. Mit dem „identify“-Befehl von Imagemagick kann ich die Farbtabelle ausgeben, die die Zeile „(255, 0, 0) #FF0000 rot“ enthält.

Brauchen: Mit einem Bash-Skript kann ich problemlos alle Dateinamen abrufen und durch sie iterieren. Ich muss herausfinden, wie ichschweigendAnalysieren Sie die Ausgabe, suchen Sie nach einer Zeichenfolgenübereinstimmung und geben Sie den Dateinamen wieder, wenn er nicht gefunden wird.

Genauer gesagt möchte ich ein Skript erstellen, das Folgendes tut:

1) findet alle *.png-Dateien in einem bestimmten Verzeichnis.

2) Führen Sie für jede Datei "identify -verbose" aus undschweigendÜbergeben Sie die Ausgabe an ...

3) Analysieren Sie die Ausgabe, um zu sehen, ob die Zeichenfolge „(255, 0, 0) #FF0000 rot“ vorhanden ist.

3a) Wenn dies der Fall ist, fahre ich stillschweigend mit der nächsten Datei fort.

3b) Wenn dies nicht der Fall ist, gebe ich den Dateinamen wieder.

Am Ende bliebe mir nur eine kurze Liste mit Miniaturansichten, die keine roten Pixel enthielten und manuell überprüft werden mussten.

Für jede Hilfe beim Erstellen dieses Skripts wäre ich dankbar.am meistengeschätzt.

Antwort1

So finden Sie Dateien, die keine roten Pixel haben:

for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255,  0,  0) #FF0000 red' || echo $i; done

So finden Sie Dateien mit roten Pixeln:

for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255,  0,  0) #FF0000 red' && echo $i; done

Der Befehl gawk fügt den Dateinamen zu jeder Ausgabezeile des Befehls „identify“ hinzu. Die Verwendung von fgrep statt grep sucht nur nach exakten Textübereinstimmungen (schneller). Das Flag -q für fgrep weist fgrep an, keine Zeilen auszugeben, sondern nur den Status auf „Erfolgreich“ oder „Fehler“ zu setzen.

Das Skript sollte für Dateinamen sicher sein, die Leerzeichen enthalten.

verwandte Informationen