바이너리 파일의 처음 10 바이트 만 가져 오는 방법


80

파일의 헤더 (처음 10 바이트)를 가져와야하는 bash 스크립트를 작성하고 다른 섹션에서 처음 10 바이트를 제외한 모든 것을 가져옵니다. 이 파일은 바이너리 파일이며 처음 10 바이트 동안 's' \0\n's ' 가있을 가능성이 높습니다 . 대부분의 유틸리티가 ASCII 파일에서 작동하는 것 같습니다. 이 작업을 수행하는 좋은 방법은 무엇입니까?


1
육각 출력을 필요로하는 누군가를 위해이 응답 참조 unix.stackexchange.com/a/10882/103618
의 Alwin 케슬러

답변:


144

이미 언급했듯이 처음 10 바이트를 얻으려면 다음을 수행하십시오.

head -c 10

처음 10 바이트를 제외한 모든 바이트를 얻으려면 (적어도 GNU 사용 tail) :

tail -c+11

3
예. 나는 dd아이디어가 마음에 들었지만이 옵션은 버퍼 크기를 변경할 필요가 없으므로 대용량 파일에서 잘 작동합니다. 감사.
User1

42

head -c 10 여기서 옳은 일을합니다.


9
이 답변이 첫 번째 답변이라는 것이 흥미롭고 정확하지만 다른 답변은 훨씬 더 많은 찬성표를 가지고 있습니다.
로버트

34

dd명령을 사용하여 바이너리 파일에서 임의의 바이트 수를 복사 할 수 있습니다 .

dd if=infile of=outfile1 bs=10 count=1
dd if=infile of=outfile2 bs=10 skip=1

1
이것은 작동하지만 상당히 느립니다. 10의 bs는이 거대한 파일을 죽이고 있습니다. 처음 10 바이트를 건너 뛰는 더 빠른 방법이 있습니까? 너무 간단 해 보입니다.
User1

dd 신뢰할 수 없습니다. 여러 가지 이유로 요청 된 것보다 적은 바이트를 읽을 수 있습니다.
.01.22

@ceving 그 이유 중 하나 이상을 언급 할 수 있습니까? 내가 당신을 믿는지 잘 모르겠습니다.
Mark Ransom

다음 예제는 2 대신 1을 인쇄합니다.{ printf a; sleep 1; printf b; } | dd bs=2 count=1 2>/dev/null | wc -c
ceving

설명은 여기여기에
ceving
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.