¿Podemos fusionar archivos binarios sin ninguna operación de copia manejando el sistema de archivos?

¿Podemos fusionar archivos binarios sin ninguna operación de copia manejando el sistema de archivos?

Me gustaría fusionar archivos binarios de manera eficiente usando un comando de shell y rápidamente encontré formas clásicas como esta:

cat file1 file2 > file3

No está mal pero:

  1. Es lento. El acceso IO es lento.
  2. Necesita espacio adicional. No quiero copiar los archivos. Simplemente concatenarlos.

Los sistemas de archivos son excelentes para manejar la fragmentación de archivos. ¿No podemos simplemente fusionar archivos usando este mecanismo?

Respuesta1

Puedes hacerlo:

cat file2 file3 [...] filen >> file1

Esto concatenará file2, file3,..., filenhasta el final de file1in situ. El >>operador le dice al shell que escriba en elfinal del archivo.

Quiere aprovechar el sistema de archivos para "manejar la fragmentación de archivos". Desafortunadamente, no existe una forma general de hacer esto. Esto se debe a que los "sistemas de archivos" son mucho más generales que los sistemas de archivos en discos; por ejemplo, tieneNFS,FUSIBLEy muchos otros mecanismos que le permiten exponer cualquier tipo de recurso (no solobloquear dispositivoscomo discos duros) como una jerarquía de sistema de archivos. Incluso para los sistemas de archivos basados ​​en dispositivos de bloques, no existe un mecanismo estándar para hacer esto, y tampoco conozco ninguno específico de implementación.

Respuesta2

Coloque sus nombres de archivos en orden en un archivo de texto llamado list.txtseparado por nuevas líneas. Luego ejecuta esto en bash:

while read line; do echo -n . ; dd if="$line" of=out status=none conv=notrunc oflag=append; done < list.txt

Esto creará el archivo concatenado 'out' en el directorio actual.

Respuesta3

    dd if=firstfile.raw > completedfile.raw
    dd if=nfile.raw    >> completedfile.raw
    dd if=lastfile.raw >> completedfile.raw

información relacionada