Tengo un archivo .7z que contiene ~ 360,000 imágenes en múltiples directorios. Me gustaría convertirlo en un .tar para poder abrirlo en otra computadora. ¿Hay una mejor manera que extraerlo a los archivos y comprimirlos nuevamente? ¿Es posible hacer la conversión directamente?
10
.7z
archivo en otra computadora?Respuestas:
No es demasiado difícil escribir algo para hacer el trabajo. Aquí hay un ejemplo de script Perl (requiere el módulo Archive :: Libarchive :: XS ).
Si quieres un tar.gz / tar.bz2 / tar.xz archivo, añada la línea
archive_write_add_filter_gzip($out);
oarchive_write_add_filter_bzip2($out);
oarchive_tar_add_filter_xz($out);
después de laarchive_write_set_format
línea.Esto no utiliza espacio en disco temporal (solo el espacio para el archivo tar de salida) y muy poca RAM (solo unos pocos MB para perl, pero funciona con los archivos un bloque a la vez, por lo que no es un problema si sus archivos son más grandes que tu RAM).
fuente
.7z
los archivos son a menudo comprimidos con algún tipo de algoritmo, mientras que los.tar
archivos son solo archivos.Difieren en su alcance, y en la mayoría de los casos una conversión requeriría una descompresión opcional siempre seguida de una extracción del archivo fuente. Incluso si un
.7z
archivo no utilizara ninguna compresión, aún requeriría una extracción.Dicho esto, si pretendías [descomprimir] / extraer / volver a archivar el archivo fuente de una vez, la respuesta es que no puedes, al menos no usar las herramientas predeterminadas de Ubuntu porque
tar
no puedes leerstdin
, así que no puedes canalizar7z
ytar
. De todos modos, es muy fácil automatizar todo en un solo comando:* <path_to_archive> = ruta al
.7z
archivo fuenteAdemás, el tiempo requerido para que los archivos del archivo fuente se escriban en el disco y para que los archivos extraídos se lean con el fin de [descomprimir] / extraer / volver a archivar el archivo fuente en dos pasos es un cuello de botella para la tarea en su mayoría (aunque no solo) debido a la baja velocidad de E / S de un disco potencial, por lo que una solución parcial sería almacenar los archivos temporales en un disco RAM para casi anular el cuello de botella general:
sudo mkdir /mnt/tmpfs
sudo mount -t tmpfs -o size=<tmpfs_size> tmpfs /mnt/ramdisk
* <tmpfs_size> = tamaño del sistema de archivos en bytes * 10 3 (1, 1K, 1M, 1G, ...)mkdir /mnt/tmpfs/tmp && 7z x <path_to_source_archive> -o/mnt/tmpfs/tmp && tar cf archive.tar /mnt/tmpfs/tmp && rm -rf /mnt/tmpfs/tmp
* <path_to_archive> = ruta al.7z
archivo fuentesudo umount
sudo rmdir /mnt/tmpfs
fuente