在Linux上搜索多个图像中的特定十六进制字符串

时间:2016-05-07 09:49:07

标签: linux string grep pattern-matching xxd

我正在对图像处理进行一些研究,我想知道是否有可能在各种图像中搜索特定的十六进制字符串/字节数组。如果它给我一个具有该特定字符串的图像列表,那将是很棒的。基本上是什么grep -r""确实。出于某种原因,grep没有完成这项工作。我不熟悉字符串。我确实看过" man strings"但它并没有多大帮助。无论如何,我想找一个特定的十六进制字符串说" 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 个答案:

答案 0 :(得分:2)

使用GNU grep:

#!/bin/bash

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