
Necesito crear archivos comprimidos y poder extraer rápidamente archivos/directorios individuales de ellos.
El problema es, por ejemplo, que tar.bz2 no parece ser la mejor opción para dicha tarea: extraer un solo archivo de 4 kb de un archivo de 200 Mb (50000 archivos) lleva 17 segundos en mi máquina.
¿Existe algún formato de archivo que proporcione una exportación rápida de archivos individuales desde el archivo (y funcione en Linux)?
Respuesta1
pixzes una versión de indexación paralela de xz.
# Compress:
tar -I pixz -cf foo.tar.xz ./foo
# Decompress:
tar -I pixz -xf foo.tar.xz
# Very quickly list the contents of the compressed tarball:
pixz -l foo.tar.xz
# Very quickly extract a single file:
pixz -x dir/file < foo.tar.xz | tar x
Respuesta2
El formato Zip comprime cada archivo por separado y luego los combina (con un directorio de contenido del archivo) en un único archivo.
Respuesta3
Además del formato zip ya mencionado, las utilidades dar
y dump
también son buenas para manejar esto y, a diferencia de zip, conservan los permisos de Unix. Porque dar
desea evitar el uso de la opción de archivo sólido, ya que se remonta al método tar/gzip de comprimir todo a la vez, lo que proporciona una mejor compresión, pero hace que la extracción de archivos individuales lleve más tiempo ya que se debe descomprimir todo el archivo hasta que se complete el proceso. se encuentra el archivo deseado. dump
maneja bastante bien grandes conjuntos de archivos pequeños (decenas de miles) y puede realizar compresión multiproceso, pero solo lee sistemas de archivos ext[234].
Respuesta4
.tar.gz
tiene una velocidad de descompresión más rápida, pero la compensación es el peor tamaño de compresión. Editar: Ignacio Vázquez-Abrams me hizo ninja.