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?

Usuario1
fuente
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
psmears
fuente
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í.

sombra de Luna
fuente
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
Mark Ransom
fuente
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