Necesito dividir un archivo binario en dos. Me preguntaba si se podría usar la cabeza y / o la cola, pero luego me pregunté ... ¿es seguro usar redirección, tuberías, etc. con datos binarios? ¿Se alteran las nuevas líneas o se ignoran los nulos, o la retroceso o la eliminación hacen algo especial? (bash, kubuntu 18.04 LTS)
command-line
18.04
bash
kubuntu
B. Tanner
fuente
fuente
split
comando.Respuestas:
Sí, es seguro si lo canaliza a otro proceso o lo guarda en un archivo. Existe una "rareza" potencial si deja que la impresión estándar binaria se imprima en un terminal, ya que puede contener secuencias de escape (al azar) que pueden estropear temporalmente la pantalla del terminal.
fuente
reset
y presionar enter para arreglarloreset<enter>
no escriba esa secuencia de caracteres como se ve en el terminal ...stty sane; tput rs1
secuencia de comandos hará el truco para cuando hay casos de esquina dereset
no funcionar. Tales casos, además de los mencionados por Bakuriu, podrían incluir el ancho de la línea / columnas del terminal o supongo que las configuraciones relacionadas con la comunicación en serie (velocidad de transmisión / paridad).El principal problema con el uso de comandos como
head
otail
es que están orientados a líneas y los archivos binarios no. Si tienen nuevas líneas, a menudo no se utilizan para representar el final de una línea y, si lo son, pueden ser parte de cadenas como mensajes de programa o campos de datos.Si los datos están estructurados de alguna manera, entonces debe tener eso en cuenta al elegir los puntos divididos para no romper las estructuras en el medio.
Si conoce la estructura del archivo, puede usar un comando como
con opciones para copiar solo tantos bloques de datos de un tamaño específico que comienzan en un desplazamiento particular (incrementado) en el archivo.
Parece que el
split
comando mencionado por @egmont automatizará este proceso por usted, pero parece estar orientado a la línea de forma predeterminada, por lo que tendrá que especificar opciones adicionales como--bytes count
decirle qué tan grande debe ser cada parte del archivo ser.Como nota al margen, si no sabe qué hay en un archivo, pero sospecha que contiene al menos algunos datos textuales significativos, el
strings
comando es una excelente manera de echar un primer vistazo para ver con qué está tratando.encontrará todas las series de caracteres imprimibles de al menos seis caracteres de longitud y los mostrará en un buscapersonas para que no vuelen en el terminal. El uso de un número un poco mayor que el valor predeterminado de 4 caracteres ayuda a eliminar pequeños fragmentos de datos que simplemente se pueden imprimir, pero que no se usan de esa manera en el archivo.
Si luego tiene que explorar el archivo con más detalle con un editor binario como
hexedit
, tendrá algunos puntos de referencia que indican dónde se puede encontrar algo interesante.strings
tiene una opción:t x
precederá a cada cadena impresa con su desplazamiento en el archivo en hexadecimal (o para octal / d para decimal) para que sepa dónde encontrarla más adelante. Incluso los archivos muy cortos son mucho para tratar cuando tienes que mirarlos carácter por carácter.fuente