ファイルデータが特定の16進数シーケンスで始まる場合は、そのファイルに対してstringsコマンドを実行します。

ファイルデータが特定の16進数シーケンスで始まる場合は、そのファイルに対してstringsコマンドを実行します。

ディレクトリを再帰的にクロールし、ファイルに最初の4バイトがある場合は、そのファイルで実行したいと\x58\x46\x53\x00思います。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

ファイルの最初の4バイトが特定の文字列XFS\0(質問の16進バイトシーケンスに対応する文字列)であることを確認するには、次の手順を実行します。

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

od -N 4 -aファイルの最初の4バイトをシングルバイト文字表示形式に変換します。私たちはこれを使って、私たちが探しているものと比較して出力をテストしますgrep -qFod

リトルエンディアンシステムでは、od -N 4追加のフラグなしでgrepを使用できます043130 000123

または:

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

関連情報