디렉터리를 재귀적으로 크롤링하고 파일에 처음 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