끝에 null로 채워진 거대한 이진 파일이 있으며 마지막 0이 아닌 null 바이트, 특히 파일 시작 부분의 오프셋을 찾고 싶습니다.
몇 가지 명령 줄 솔루션을 찾고 있습니다.
답변
어떤 도구를 가지고 있는지 또는 어떤 OS를 가지고 있는지에 대해서는 아무 말도하지 않지만 xxd 및 grep과 같은 표준 유닉스 도구에 액세스한다고 가정하면 다음과 같이 할 수 있습니다.
xxd my_binary_file | grep -E ": [0-9,a-f, ]*[1-9,a-f]+"
위의 명령은 0000으로 표시된 파일 부분을 필터링합니다.
답변
작은 파일의 경우 :
hexdump -C file | tail
이 hexdump
유틸리티는 동일한 내용으로 연속적인 행을 압축하므로 마지막 10 행의 출력을 제외한 모든 행을 삭제하면 출력이 반복되는 마지막 위치가 표시됩니다.
더 큰 파일의 경우
dd if=file bs=1M skip=$n count=1 | hexdump -C | tail
의 다른 값에 대해서는 $n
이진 검색을 수행하십시오. 예 : 700GB 파일의 경우,로 시작 skip=350000
합니다. 출력이 모두 0으로 돌아 오면 반으로 줄어 skip=175000
들고 0이 아닌 바이트를 표시하면 0으로 돌아가고 skip=525000
각 반복에서 단계 크기를 절반으로 줄입니다. 이것은 파일 내부에 큰 0 블록이 없지만 큰 파일의 경우 훨씬 빠르다고 가정합니다.