바이너리 파일에서 0이 아닌 마지막 바이트를 찾으십시오. 어떻게? 0이 아닌 null 바이트, 특히

끝에 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 블록이 없지만 큰 파일의 경우 훨씬 빠르다고 가정합니다.