En los sistemas Unix, los archivos se pueden unir mediante la cat
utilidad (los sistemas Windows tienen type
ocopy /B
).
cat file1 file2 file3 > joined-file
Esto toma el contenido de los archivos antiguos y lo copia en un solo archivo nuevo. El proceso lleva el tiempo necesario para leer los archivos antiguos y escribir el nuevo. El nuevo archivo se almacena por separado en los archivos antiguos, por lo que el comando fallará si no queda suficiente espacio libre en el disco para escribir el nuevo archivo.
¿Hay alguna forma más rápida de combinar los archivos, o al menos "engañar" a los programas para que piensen que los archivos están combinados, que no implica mover o copiar datos en el disco?
Una forma de hacerlo podría ser modificar el TOC del sistema de archivos para que los archivos se traten como fragmentos de un archivo más grande. ¿Hay una manera "segura" de hacer esto (es decir, más seguro que usar dd
para modificar el TOC manualmente)?
Estoy interesado en cualquier método para unir los archivos, en cualquier plataforma, que sea más rápido y requiera menos espacio en disco que concatenar físicamente los archivos.
fuente
dmsetup
herramienta está diseñada para trabajar con dispositivos de bloque y / o archivos normales que son imágenes de dispositivos de bloque, por lo que utiliza bloques comunes de 512 B. Quizás uno podría bifurcar el proyecto y modificar la fuente para permitir una resolución de 1 B, I no lo senbd
, no pude hacerlo funcionar tan fácilmente. Investigue concatfs y / o concat-fuse (este ya está en la respuesta de davidgo a continuación). No los he probado, así que esto es solo un comentario.Respuestas:
Postulé que esto podría ser posible usando algún tipo de sistema de archivos superpuesto sobre uno existente (modificar uno existente es una receta para el desastre), luego pensé que probablemente podría escribir algo para Linux usando FUSE (sistema de archivos en el espacio de usuario)
En una alondra busqué en Google y descubrí que alguien ya lo ha implementado: hay un proyecto GIT llamado concat-fuse - https://github.com/concat-fuse/concat-fuse/blob/master/README.md - que se ve para hacer lo que estás describiendo.
fuente