如果文件数据以某个十六进制序列开头,则在文件上运行 strings 命令

如果文件数据以某个十六进制序列开头,则在文件上运行 strings 命令

我想递归地抓取一个目录,如果该文件有\x58\x46\x53\x00前 4 个字节,我想strings在该文件上运行。

答案1

如果您这是经常使用的文件类型,我会在您的~/.magic(甚至在系统魔术文件中)中定义它:

0 long 0x00534658 XFS-file

(假设您使用的是小端系统)。现在您可以使用file命令进行测试:

$ file testfile
testfile: XFS-file

你可以这样做来进行测试:

if [[ `file -b testfile` == XFS-file ]]; then strings testfile; fi

答案2

h_signature=$(echo 58465300 | tr 'a-f' 'A-F')
read -r x a b x <<<$(od --endian=big -N 4 -t x2 yourfile | tr 'a-f' 'A-F')
case "$a$b" in "$h_signature" ) strings yourfile ;; esac

甲基-2:

dd if=yourfile count=4 bs=1 2>/dev/null |
perl -lpe '$_ = uc unpack "H*"' | xargs test "$h_signature" = && strings yourfile

甲基-3:

head -c 4 yourfile | xxd -ps -g 4 | grep -qwi "$h_signature" && strings yourfile

答案3

要查看文件的前四个字节是否是特定字符串XFS\0(问题中的十六进制字节序列对应的字符串):

if od -N 4 -a file | grep -qF 'X   F   S nul'; then
    strings file
fi

od -N 4 -a会将文件的前四个字节转换为其单字节字符显示格式。我们用来根据我们正在寻找的内容grep -qF来测试输出。od

在小端机器上,您可以od -N 4不使用任何附加标志而使用 grep for 043130 000123

或者:

if od -N 4 -A n -c file | tr -d ' ' | grep -qF 'XFS\0'; then
    strings file
fi

相关内容