Tengo un archivo que tiene papelera (encabezado y pie de página binarios) al principio y al final del archivo. Me gustaría saber cómo destruir estos bytes. Por ejemplo, supongamos 25 bytes desde el principio. Y a 2 bytes del final.
Sé que puedo usar truncate y dd, pero truncate no funciona con una secuencia y parece un poco complicado ejecutar dos comandos en el archivo duro. Sería mejor si truncate
, sabiendo el tamaño del archivo, pudiera enviarlo a dd
. ¿O si hubiera una manera mejor de hacer esto?
Respuesta1
Respuesta2
ddhará ambas cosas por usted con un solo comando. Establezca el tamaño del bloque en 1 byte, omita los primeros 25 bytes, cuente hasta el tamaño del archivo menos los bytes omitidos y finales.
100 byte file
file.img
dd if=./file.img of=./trimed_file.img bs=1 skip=25 count=73
Verifique dos veces los números porque podría contar desde 0.
Respuesta3
Con ksh93:
{ head -c "$n"; } < file <#((n = EOF - 25 - 2 , 25))
O hacerlo in situ:
{ head -c "$n"; } < file <#((n = EOF - 25 - 2 , 25)) 1<>; file
Si lo tiene /opt/ast/bin
por delante $PATH
, obtendrá el head
incorporado.
<#((...))
es unlseek()
operador....
se interpreta como una expresión aritmética dondeEOF
es la longitud del archivo. Entonces, arriba, asignamos la longitud de la parte a mostrar$n
y buscamos 25 bytes dentro del archivo.<>;
es un operador de redirección abrir en modo lectura+escritura y truncar si el comando tiene éxito.