У меня есть файл .7z, содержащий ~ 360 000 изображений в нескольких каталогах. Я хотел бы преобразовать его в .tar, чтобы открыть его на другом компьютере. Есть ли лучший способ, чем распаковывать его в файлы и снова сжимать? Можно ли сделать преобразование напрямую?
10
.7z
файл на другом компьютере?Ответы:
Это не так сложно написать что-то, чтобы сделать работу. Вот пример сценария Perl (требуется модуль Archive :: Libarchive :: XS ).
Если вы хотели tar.gz / tar.bz2 / tar.xz архив, добавить строку
archive_write_add_filter_gzip($out);
илиarchive_write_add_filter_bzip2($out);
илиarchive_tar_add_filter_xz($out);
послеarchive_write_set_format
линии.При этом не используется временное дисковое пространство (только место для выходного tar-файла) и очень мало оперативной памяти (всего несколько МБ для perl, но он работает с файлами по одному блоку за раз, поэтому если ваши файлы больше, то это не проблема) чем ваша RAM).
источник
.7z
архивы - это архивы, которые часто сжимаются по какому-то алгоритму, а.tar
архивы - это просто архивы.Они различаются по своему объему, и в большинстве случаев преобразование потребует необязательной распаковки, за которой всегда следует извлечение исходного архива. Даже если
.7z
архив не использует сжатие, он все равно потребует извлечения.При этом, если вы намеревались [распаковать] / извлечь / переархивировать исходный архив сразу, ответ таков: вы не можете, по крайней мере, не использовать стандартные инструменты Ubuntu, потому что
tar
не можете читатьstdin
, поэтому вы не можете передавать7z
иtar
, В любом случае, все очень просто автоматизировать одной командой:* <path_to_archive> = путь к исходному
.7z
архивуКроме того , время , необходимое для файлов исходного архива, чтобы записать на диск и для извлечения файлов для чтения, чтобы [декомпрессия] / выписка / rearchive архив источника в два этапа является узким местом для всей задачи в основном (Altough не только) из-за низкой скорости ввода-вывода потенциального диска, поэтому частичным решением было бы сохранить временные файлы на виртуальном диске для того, чтобы почти устранить общее узкое место:
sudo mkdir /mnt/tmpfs
sudo mount -t tmpfs -o size=<tmpfs_size> tmpfs /mnt/ramdisk
* <tmpfs_size> = размер файловой системы в байтах * 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> = путь к исходному.7z
архивуsudo umount
sudo rmdir /mnt/tmpfs
источник