Поиск заданной шестнадцатеричной строки в нескольких изображениях в Linux
Я занимаюсь исследованием обработки изображений и хотел узнать, возможно ли найти конкретную шестнадцатеричную строку / массив байтов в различных изображениях. Было бы здорово, если бы он дал мне список изображений с этой конкретной строкой. В основном то, что делает grep -r "". По какой-то причине grep не выполняет эту работу. Я не знаком со строками. Я посмотрел на "мужские нити", но это не сильно помогло. В любом случае, я хотел бы найти конкретную шестнадцатеричную строку, скажем "0002131230443" (или даже конкретный байтовый массив, например, строку base64) в нескольких изображениях в одной папке. Любая помощь будет высоко оценен.
Я нашел этот код, который точно делает то, что я хочу, используя xxd и grep. Пожалуйста, найдите команду ниже: xxd -p /your/file | tr -d '\n' | grep -c '22081b00081f091d2733170d123f3114'
К вашему сведению: он вернет 1, если содержимое соответствует, 0 в противном случае.
xxd -p преобразует файл в обычный шестнадцатеричный дамп, tr -d '\n' удаляет символы новой строки, добавленные xxd, а grep -c подсчитывает количество совпавших строк.
Кто-нибудь знает, как запустить приведенный выше код в определенном каталоге, используя скрипт bash. У меня есть около 400 изображений, и я хочу, чтобы он возвращал только 400 (то есть количество совпадений строк), если все 400 изображений имеют эту конкретную строку. Я нашел этот код скрипта ниже, но он запускает один и тот же код снова и снова 400 раз, возвращая либо 0, либо 1 каждый раз:
#!/bin/bash
FILES=/FILEPATH/*
for f in $FILES
do
echo "PROCESSING $f FILES"
echo "-------------------"
XXD -u $f | grep ABCD
echo "-------------------"
done
Спасибо, парни.
Plasma33
1 ответ
С GNU grep:
#!/bin/bash
files=/FILEPATH/*
for f in $files
do
grep -m 1 -P '\x22\x08\x1b\x00' < "$f"
done | wc -l