
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 tar
und anderen Dienstprogrammen erheblich vereinfachen sollten, aber ich kann diese nicht mehr finden.
Aktualisieren:
Wie kann ich etwas so konfigurieren, atool
dass es nicht unzip
zum 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 als
bereitgestellte Befehl, der den Inhalt aller unterstützten Archivformate auflistet.
Der Hauptbefehl atool
verwendet 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 ~/.atoolrc
und 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 ar
Archive und xz-komprimierte tar
Archive 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/local
oder in Ihrem Home-Verzeichnis zu verwenden, Sie müssen Dateien in bearbeiten /usr
oder neu kompilieren). /usr/share/avfs/extfs/ext-uzip
ist das Skript zum Umgang mit .zip
Dateien. Ä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.ini
und ext-uzip
in zu ändern u7z .zip
.
Antwort4
Bibliotheksarchivist einMultiformat-Archivierungs- und Komprimierungsbibliothekdas unterstütztviele Archiv- und Komprimierungsformate.
bsdtar
und bsdcpio
sind 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.tar
mit einem herkömmlichen tar
Befehl tun würden.