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.