Gibt es ein einziges kostenloses/Open-Source-Befehlszeilentool zum Extrahieren aller Archiv-/Komprimierungsformate?

Gibt es ein einziges kostenloses/Open-Source-Befehlszeilentool zum Extrahieren aller Archiv-/Komprimierungsformate?

Mit einemzunehmende Zahlvon Archivierungs-/Komprimierungsdateiformaten, gibt es ein einziges kostenloses/Open-Source-Befehlszeilentool, das sie alle beherrscht? Vielleicht etwas mit einem konsistenten/einheitlichen Satz von Flags? (beachten Sie meine freundlicheimpliziter Verweis auf tar)

Ich bin einmal auf eine Reihe von Aliasnamen gestoßen, die das Komprimieren/Dekomprimieren von Dateien mit Bindungen an tarund anderen Dienstprogrammen erheblich vereinfachen sollten, aber ich kann diese nicht mehr finden.

Aktualisieren: Wie kann ich etwas so konfigurieren, atooldass es nicht unzipzum Extrahieren von ZIP-Dateien verwendet wird (das anscheinend keine Dateien verarbeiten kann, die größer als 4 GB sind) und stattdessen verwendet wird gunzip?

$ aunpack large_file.zip
error:  Zip file too big (greater than 4294959102 bytes)
Archive:  large_file.zip
warning [large_file.zip]:  1491344848 extra bytes at beginning or within zipfile
  (attempting to process anyway)
error [large_file.zip]:  start of central directory not found;
  zipfile corrupt.
  (please check that you have transferred or created the zipfile in the
  appropriate BINARY mode and that you have compiled UnZip properly)
aunpack: unzip ...: non-zero return-code

Antwort1

ich benutzeein Werkzeug. Es funktioniert. Es funktioniert mit vielen, wenn auch nicht allen Formaten:

tar, gzip, bzip2, bzip, lzip, lzop, lzma, zip, rar, lha, arj, arc, p7zip usw.

Diese Komprimierungstools werden jedoch weiterhin benötigt, da es sich bei atool lediglich um ein Frontend für sie handelt.

Mir gefällt insbesondere der alsbereitgestellte Befehl, der den Inhalt aller unterstützten Archivformate auflistet.

Der Hauptbefehl atoolverwendet seine eigenen Flags zum Extrahieren von Archiven (indem er die entsprechenden Flags an die jeweiligen zugrunde liegenden Extraktionstools übergibt).

Oh, und es befindet sich in den Repositories einiger Distributionen (in meinem Fall Fedora, obwohl es, soweit ich mich erinnere, damals, als ich Ubuntu verwendete, noch nicht in deren Repos war und ich es von einem Tarball installiert habe).

Update zu Repositorien: atool befindet sich in den Repositories der folgenden Distributionen (nur aktuelle Versionen geprüft):

  • Fedora
  • Debian (danke @terdon, und vermutlich auch dessen Derivate wie Ubuntu)
  • Ubuntu (qed und vermutlich Derivate wie Mint)
  • Öffnen Sie Suse
  • CentOS (und vermutlich RHEL)
  • Arch Linux

Ich bin sicher, dass es noch andere gibt ... wahrscheinlich die meisten modernen Distributionen.

Antwort auf die aktualisierte Frage „Wie kann ich etwas wie atool so konfigurieren, dass zum Extrahieren von Zip-Dateien nicht unzip verwendet wird ... sondern stattdessen gunzip?“:

Bearbeiten Sie die atool-Konfigurationsdatei ~/.atoolrcund fügen Sie die Zeile hinzu:

path_unzip /usr/bin/gunzip

mit dem richtigen Pfad zu Ihrem Gunzip-Programm.

Die vollständige Liste der möglichen Variablen, die Sie in diese Konfigurationsdatei einfügen können, finden Sie auf der Manpage. Es gibteine Menge. Wenn die für „gunzip“ erforderlichen Befehlszeilenoptionen sich von denen für „unzip“ unterscheiden, müssen Sie möglicherweise die Atool-Quelle (Perl) selbst ändern.

Antwort2

Hier ist eine kleine Shell-Funktion, die sich um mehrere Archivtypen kümmert.

extract () {
    if [ ! -f "$1" ] ; then
        echo "'$1' does not exist."
        return 1
    fi

    case "$1" in
        *.tar.bz2)   tar xvjf "$1"   ;;
        *.tar.xz)    tar xvJf "$1"   ;;
        *.tar.gz)    tar xvzf "$1"   ;;
        *.bz2)       bunzip2 "$1"    ;;
        *.rar)       rar x "$1"      ;;
        *.gz)        gunzip "$1"     ;;
        *.tar)       tar xvf "$1"    ;;
        *.tbz2)      tar xvjf "$1"   ;;
        *.tgz)       tar xvzf "$1"   ;;
        *.zip)       unzip "$1"      ;;
        *.Z)         uncompress "$1" ;;
        *.xz)        xz -d "$1"      ;;
        *.7z)        7z x "$1"       ;;
        *.a)         ar x "$1"       ;;
        *)           echo "Unable to extract '$1'." ;;
    esac
}

ich fand dieOriginalfassungdieser Funktion irgendwo online und habe sie ein wenig modifiziert, um arArchive und xz-komprimierte tarArchive zu extrahieren.

Antwort3

DerAVFSDateisystem stellt eine Ansicht des Dateisystems dar, in der jede Archivdatei (z. B. /path/to/foo.zip) als Verzeichnis zugänglich ist ( ~/.avfs/path/to/foo/zip#für dieses Beispiel). AVFS bietet schreibgeschützten Zugriff auf die meisten gängigen Archivdateiformate.

mountavfs
cp -Rp ~/.avfs$PWD/large_file.zip\# extraction_directory

Avfs verwendet externe Helfer, die einfach durch Bearbeiten von Dateien in konfiguriert werden können /usr(leider gibt es ab avfs 1.0 keine Möglichkeit, Dateien in /usr/localoder in Ihrem Home-Verzeichnis zu verwenden, Sie müssen Dateien in bearbeiten /usroder neu kompilieren). /usr/share/avfs/extfs/ext-uzipist das Skript zum Umgang mit .zipDateien. Ändern Sie es, wenn Sie es nicht verwenden möchten /usr/bin/unzip. Möglicherweise können Sie stattdessen auch 7z verwenden: Versuchen Sie, die Zeile zu bearbeiten /usr/share/avfs/extfs/extfs.iniund ext-uzipin zu ändern u7z .zip.

Antwort4

Bibliotheksarchivist einMultiformat-Archivierungs- und Komprimierungsbibliothekdas unterstütztviele Archiv- und Komprimierungsformate.

bsdtarund bsdcpiosind Befehlszeilenschnittstellen dazu mit einer tar-ähnlichen bzw. einer cpio-ähnlichen API.

Wenn Sie also bereits mit einem dieser Dienstprogramme vertraut sind, müssen Sie sich eine Befehlszeilenschnittstelle weniger aneignen.

Um Ihre .iso, .zip, .cab, .7z, .tar.gz.xz.bz2...-Datei zu entpacken, müssen Sie nur Folgendes tun:

bsdtar xf file.<ext>

Wie Sie es tar xf file.tarmit einem herkömmlichen tarBefehl tun würden.

verwandte Informationen