파일 데이터가 특정 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 -qF.od

리틀 엔디안 시스템에서는 od -N 4추가 플래그 없이 grep을 사용할 수 있습니다 043130 000123.

또는:

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

관련 정보