我想递归地抓取一个目录,如果该文件有\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