Ich habe eine .7z-Datei mit ~ 360.000 Bildern in mehreren Verzeichnissen. Ich möchte es in eine .tar-Datei konvertieren, damit ich es auf einem anderen Computer öffnen kann. Gibt es eine bessere Möglichkeit, als es in Dateien zu extrahieren und erneut zu komprimieren? Ist die Konvertierung direkt möglich?
10
.7z
Datei auf einem anderen Computer zu öffnen ?Antworten:
Es ist nicht allzu schwer, etwas zu schreiben, um die Arbeit zu erledigen. Hier ist ein Beispiel für ein Perl-Skript (erfordert das Modul Archive :: Libarchive :: XS ).
Wenn Sie ein Archiv tar.gz / tar.bz2 / tar.xz möchten, fügen Sie die Zeile
archive_write_add_filter_gzip($out);
oderarchive_write_add_filter_bzip2($out);
oderarchive_tar_add_filter_xz($out);
nach derarchive_write_set_format
Zeile hinzu.Dies verwendet keinen temporären Speicherplatz (nur den Speicherplatz für die Ausgabe-TAR-Datei) und sehr wenig RAM (nur ein paar MB für Perl, aber es funktioniert blockweise mit den Dateien, sodass es kein Problem ist, wenn Ihre Dateien größer sind als Ihr RAM).
quelle
.7z
Archive sind Archive, die häufig mit einem Algorithmus komprimiert werden, während.tar
Archive nur Archive sind.Sie unterscheiden sich in ihrem Umfang, und in den meisten Fällen würde eine Konvertierung eine optionale Dekomprimierung erfordern, gefolgt von einer Extraktion des Quellarchivs. Selbst wenn ein
.7z
Archiv keine Komprimierung verwenden würde, wäre dennoch eine Extraktion erforderlich.Davon abgesehen: Wenn Sie das Quellarchiv auf einmal [dekomprimieren] / extrahieren / durchsuchen wollten, ist die Antwort, dass Sie es nicht können, zumindest nicht die Standardtools von Ubuntu, weil Sie
tar
nicht lesen könnenstdin
, also können Sie nicht7z
und weiterleitentar
. Auf jeden Fall ist es sehr einfach, alles in einem einzigen Befehl zu automatisieren:* <Path_to_archive> = Pfad zum
.7z
QuellarchivAuch die Zeit, die erforderlich ist, um die Dateien des Quellarchivs auf die Festplatte zu schreiben und die extrahierten Dateien zu lesen, um das Quellarchiv in zwei Schritten [zu dekomprimieren] / zu extrahieren / zu durchsuchen, ist meistens ein Engpass für die gesamte Aufgabe (obwohl dies nicht der Fall ist) Nur) Aufgrund der geringen E / A-Geschwindigkeit einer potenziellen Festplatte besteht eine Teillösung darin, die temporären Dateien auf einer Ramdisk zu speichern, um den gesamten Engpass fast zu beseitigen:
sudo mkdir /mnt/tmpfs
sudo mount -t tmpfs -o size=<tmpfs_size> tmpfs /mnt/ramdisk
* <tmpfs_size> = Größe des Dateisystems in 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> = Pfad zum.7z
Quellarchivsudo umount
sudo rmdir /mnt/tmpfs
quelle