我正在对图像处理进行一些研究,我想知道是否有可能在各种图像中搜索特定的十六进制字符串/字节数组。如果它给我一个具有该特定字符串的图像列表,那将是很棒的。基本上是什么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
答案 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