2

我正在对图像处理进行一些研究,我想知道是否可以在各种图像中搜索特定的十六进制字符串/字节数组。如果它能给我一个包含该特定字符串的图像列表,那就太好了。基本上 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

多谢你们。

等离子33

4

1 回答 1

2

使用 GNU grep:

#!/bin/bash

files=/FILEPATH/*
for f in $files
do
  grep -m 1 -P '\x22\x08\x1b\x00' < "$f"
done | wc -l
于 2016-05-07T10:14:36.720 回答