Universale Abzieher

19

Gibt es mit einer zunehmenden Anzahl von Archivierungs- / Komprimierungsdateiformaten ein einziges kostenloses / Open-Source-Befehlszeilentool, um alle zu regieren? Vielleicht etwas mit einem konsistenten / einheitlichen Satz von Flags? (Beachten Sie meine freundliche implizite Bezugnahme auf Teer )

Ich bin einmal auf eine Reihe von Aliasnamen gestoßen, die die Komprimierung / Dekomprimierung von Dateien mit Bindungen zu tarund anderen Dienstprogrammen weitgehend vereinfachen sollen , aber ich kann diese nicht mehr finden.

Update: Wie kann ich so etwas konfigurieren, dass atooles nicht unzipzum Extrahieren von ZIP-Dateien verwendet wird (die anscheinend keine Dateien größer als 4 GB verarbeiten können) und gunzipstattdessen verwenden?

$ 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
Amelio Vazquez-Reina
quelle
1
noch eine andere lösung: packages.qa.debian.org/u/unp.html
frostschutz
@frostschutz. Wissen Sie, ob es etwas gibt, das sich von dem unpackunterscheidet atool?
Amelio Vazquez-Reina
Keine Ahnung. Wie Evans Antwort zeigt, ist ein solches Programm ziemlich trivial. Verwenden Sie, was auch immer für Sie funktioniert. Ich persönlich bevorzuge das Entpacken von ZIP-Dateien 7z.
Frostschutz
1
@ user815423426 Ich habe meiner vorhandenen Antwort Anweisungen für Ihre aktualisierte Frage hinzugefügt.
SuperMagic

Antworten:

17

Ich benutze Atool . Es macht den Job. Es funktioniert mit vielen, wenn auch nicht allen Formaten:

Teer, GZIP, BZIP2, BZIP, LZIP, LZOP, LZMA, ZIP, RAR, LHA, ARJ, ARC, P7ZIP usw.

Diese Komprimierungswerkzeuge werden weiterhin benötigt, da atool lediglich ein Frontend für sie ist.

Mir gefällt besonders der alsBefehl, der den Inhalt aller unterstützten Archivformate auflistet.

Der Hauptbefehl atoolverwendet seine eigenen Flags zum Extrahieren von Archiven (Übergabe der entsprechenden Flags an die jeweiligen zugrunde liegenden Extraktionswerkzeuge).

Oh, und es ist in den Repositories einiger Distributionen (Fedora in meinem Fall, obwohl ich mich erinnere, als ich Ubuntu benutzte, war es damals nicht in ihren Repos und ich habe es von einem Tarball aus installiert.).

Update auf Repositories : atool befindet sich in den Repositories der folgenden Distributionen (nur aktuelle Releases geprüft):

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

Ich bin sicher, es gibt andere ... plausibel die modernsten Distributionen.

Antwort auf die aktualisierte Frage "Wie kann ich so etwas wie atool so konfigurieren, dass zum Extrahieren von ZIP-Dateien kein Entpacken verwendet wird ... und stattdessen gunzip verwendet wird" :

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

path_unzip /usr/bin/gunzip

mit dem richtigen Pfad zu Ihrem Gunzip-Programm.

Auf der Manpage finden Sie eine vollständige Liste der möglichen Variablen, die Sie in diese Konfigurationsdatei einfügen können, von denen es viele gibt . Wenn sich die für gunzip erforderlichen Befehlszeilenoptionen von unzip unterscheiden, müssen Sie möglicherweise die atool-Quelle (Perl) selbst ändern.

SuperMagic
quelle
Vielen Dank. Das sieht gut aus. Wissen Sie, ob es neben dem Herunterladen des Tarballs ein (git / bzr) -Repository dafür gibt, oder vielleicht eine Abzweigung davon?
Amelio Vazquez-Reina
Es scheint kein Git-Repo dafür zu geben. Es gibt ein, Schauder, cvs Repo: savannah.nongnu.org/cvs/?group=atool . Die Quelle befindet sich jedoch im Tarball und das Tool ist in Perl geschrieben, so dass Sie oder jeder, der den Drang verspürt, es leicht ändern können.
SuperMagic
1
@ user815423426 ist es auch in den Debian-Repos.
Terdon
9

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 die Originalversion dieser Funktion irgendwo online und änderte sie ein wenig, um arArchive und xz-komprimierte tarArchive zu extrahieren .

starbeamrainbowlabs
quelle
Das sieht gut aus. Ist das für Bash?
Amelio Vazquez-Reina
Ich habe das nur mit bashund getestet zsh, aber es sollte auch funktionieren sh.
Dies ist für eine Schalenfunktion ausgesprochen ästhetisch. Eine Einschränkung wäre, dass Sie sicherstellen möchten, dass alle relevanten Binärdateien installiert sind, oder dass Sie Zeilen für diejenigen entfernen möchten, die Sie nicht installiert haben.
BGVAUGHAN
3

Das AVFS- Dateisystem bietet eine Ansicht des Dateisystems, in dem jede Archivdatei (z. B. /path/to/foo.zip) als Verzeichnis verfügbar ist ( ~/.avfs/path/to/foo/zip#in diesem Beispiel). AVFS bietet schreibgeschützten Zugriff auf die gängigsten Archivdateiformate.

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

AVFS externe Helfer verwendet , die leicht durch Editieren von Dateien in konfiguriert werden kann /usr(leider gibt es keine Möglichkeit , wie von AVFS 1.0 zu verwenden , um Dateien in /usr/localoder in Ihrem Home - Verzeichnis, müssen Sie bearbeiten Dateien in /usroder neu zu kompilieren). Ist /usr/share/avfs/extfs/ext-uzipdas Skript für den Umgang mit .zipDateien, ändern Sie es, wenn Sie es nicht verwenden möchten /usr/bin/unzip. Möglicherweise können Sie 7z nicht mehr verwenden: Versuchen Sie /usr/share/avfs/extfs/extfs.ini, die Zeile ext-uzipzu bearbeiten und ändern Sie sie in u7z .zip.

Gilles 'SO - hör auf böse zu sein'
quelle