Cómo obtener solo los primeros diez bytes de un archivo binario


80

Estoy escribiendo un script bash que necesita obtener el encabezado (primeros 10 bytes) de un archivo y luego en otra sección obtener todo excepto los primeros 10 bytes. Estos son archivos binarios y probablemente tendrán un \0'y \n' en los primeros 10 bytes. Parece que la mayoría de las utilidades funcionan con archivos ASCII. ¿Cuál es una buena forma de lograr esta tarea?


1
Para cualquier persona que necesite la salida hexadecimal, consulte esta respuesta unix.stackexchange.com/a/10882/103618
— Alwin Kesler

Respuestas:


144

Para obtener los primeros 10 bytes, como ya se señaló:

head -c 10

Para obtener todos menos los primeros 10 bytes (al menos con GNU tail):

tail -c+11

3
Si. Me gustó la ddidea, pero esta opción no requiere un cambio en el tamaño del búfer, por lo que funciona bien con archivos grandes. Gracias.
— Usuario1

42

head -c 10 hace lo correcto aquí.


9
Es interesante que esta respuesta fue la primera, es correcta, pero las otras tienen muchos más votos a favor.
— robert

34

Puede usar el ddcomando para copiar un número arbitrario de bytes de un archivo binario.

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

1
Esto funciona pero es bastante lento. El bs de 10 está matando estos archivos enormes. ¿Existe una forma más rápida de omitir los primeros diez bytes? Parece tan simple.
— Usuario1

dd no es confiable. Puede leer menos bytes de los solicitados por muchas razones diferentes.
— Desde el

@ceving, ¿podrías mencionar al menos una de esas razones? No estoy seguro de creerte.
— Mark Ransom

El siguiente ejemplo imprime 1 en lugar de 2:{ printf a; sleep 1; printf b; } | dd bs=2 count=1 2>/dev/null | wc -c
— desde el

La explicación está aquí y aquí
— desde el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.