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

.7zarchivo 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_formatlí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
.7zlos archivos son a menudo comprimidos con algún tipo de algoritmo, mientras que los.tararchivos 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
.7zarchivo 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
tarno puedes leerstdin, así que no puedes canalizar7zytar. De todos modos, es muy fácil automatizar todo en un solo comando:* <path_to_archive> = ruta al
.7zarchivo 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/tmpfssudo 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.7zarchivo fuentesudo umountsudo rmdir /mnt/tmpfsfuente