2016-05-07 12 views
2

Ich mache einige Nachforschungen über Bildverarbeitung und ich wollte wissen, ob es möglich ist, nach einem bestimmten hexadezimalen String Array in verschiedenen Bildern zu suchen. Es wäre großartig, wenn es mir eine Liste von Bildern gibt, die diese spezifische Zeichenkette hat. Im Grunde was grep -r "" tut. Aus irgendeinem Grund funktioniert Grep nicht. Streicher kenne ich nicht. Ich habe mir "Man Strings" angesehen, aber es hat nicht viel geholfen. Wie auch immer, ich würde gerne nach einer bestimmten hexadezimalen Zeichenfolge "0002131230443" (oder sogar einem bestimmten Byte-Array, d. H. Base64-String) in mehreren Bildern im selben Ordner suchen. Jede Hilfe würde sehr geschätzt werden.Ich suche nach einer spezifizierten Hexadezimalzeichenkette in mehreren Bildern unter Linux

Ich fand diesen Code, der genau das tut, was ich will mit xxd und grep. Bitte finden Sie den folgenden Befehl: xxd -p/your/file | tr -d '\ n' | grep -c '22081b00081f091d2733170d123f3114'

FYI: Es wird 1 zurückgeben, wenn der Inhalt übereinstimmt, 0 sonst.

xxd -p konvertiert die Datei in einen einfachen Hex-Dump, tr -d '\ n' löscht die Zeilenumbrüche um xxd, und grep -c zählt die Anzahl der übereinstimmenden Zeilen.

Kann jemand den Code oben in einem bestimmten Verzeichnis mit Bash-Skript ausführen. Ich habe ungefähr 400 Bilder, und ich möchte, dass sie nur 400 zurückgibt (d. H. Eine Zeichenkette, die der Anzahl entspricht), wenn alle 400 Bilder diese bestimmte Zeichenkette haben. Ich fand dies unter Script-Code, aber es läuft den gleichen Code immer und immer 400 Mal für 0 oder 1 jedes Mal Rückkehr:

#!/bin/bash 

FILES=/FILEPATH/* 
for f in $FILES 
do 
    echo "PROCESSING $f FILES" 
    echo "-------------------" 
    XXD -u $f | grep ABCD 
    echo "-------------------" 
done 

Danke Jungs.

Plasma33

+1

Ja, Sie haben Recht. Ich meinte Bash-Skript. Ich habe es jetzt korrigiert. Leider bin ich ein häufiger Windows-Benutzer. – plasma33

+0

Ja, das ist bedauerlich ;-). –

Antwort

2

Mit GNU grep:

#!/bin/bash 

files=/FILEPATH/* 
for f in $files 
do 
    grep -m 1 -P '\x22\x08\x1b\x00' < "$f" 
done | wc -l 
+0

Perfekt! Es hat genau so funktioniert, wie ich es wollte. Große Anstrengung. Tausend Dank!! Ich musste die Byte-Reihenfolge nicht austauschen. Zum Beispiel: Um nach 22081b00 zu suchen, habe ich einfach nacheinander '\ x22 \ x08 \ x1b \ x00' gemacht. Es funktionierte nicht, als ich den Byte-String wie gezeigt austauschte. Danke noch einmal. – plasma33

+0

Okay, das Problem auf meiner Seite war die unterschiedliche Ausgabe von 'hexdump file' und' hexdump -C file'. Ich habe meine Antwort aktualisiert. – Cyrus

+0

Keine Probs und danke @Cyrus. – plasma33