Extracteurs universels

19

Avec un nombre croissant de formats de fichiers d'archive / compression, existe-t-il un seul outil de ligne de commande gratuit / open-source pour les gouverner tous? Peut-être quelque chose avec un ensemble de drapeaux cohérent / unifié? (notez ma référence implicite amicale à tar )

Une fois, j'ai rencontré un ensemble d'alias destinés à simplifier considérablement la tâche de compression / décompression des fichiers avec des liaisons vers taret d'autres utilitaires, mais je ne peux plus le trouver.

Mise à jour: Comment puis-je configurer quelque chose comme atoolne pas utiliser unzippour extraire des fichiers zip (qui ne peut apparemment pas gérer des fichiers de plus de 4 Go) et utiliser à la gunzipplace?

$ 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
la source
1
encore une autre solution: packages.qa.debian.org/u/unp.html
frostschutz
@frostschutz. Savez-vous s'il y a quelque chose qui pourrait faire la unpackdifférence atool?
Amelio Vazquez-Reina
Je ne sais pas. Comme le montre la réponse d'Evan, un tel programme est assez trivial. Utilisez ce qui vous convient. Pour décompresser les fichiers zip, ma préférence personnelle est 7z.
frostschutz
1
@ user815423426 J'ai ajouté des instructions pour votre question mise à jour à ma réponse existante.
SuperMagic

Réponses:

18

J'utilise atool . Ça fait le boulot. Il fonctionne avec de nombreux formats, mais pas tous:

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

Ces outils de compression sont toujours nécessaires, bien que atool soit simplement un frontal pour eux.

J'aime particulièrement la alscommande qu'il fournit qui répertorie le contenu de tout format d'archive pris en charge.

La atoolcommande principale utilise ses propres indicateurs pour extraire les archives (en transmettant les indicateurs appropriés aux outils d'extraction sous-jacents spécifiques).

Oh, et c'est dans les dépôts de certaines distributions (Fedora dans mon cas, bien que si je me souviens bien, quand j'ai utilisé Ubuntu, il n'était pas dans leurs dépôts à l'époque. Et j'ai installé à partir d'un tarball.).

Mise à jour sur les référentiels : atool se trouve dans les référentiels des distributions suivantes (versions actuelles vérifiées uniquement):

  • Feutre
  • Debian (merci @terdon, et, vraisemblablement, ce sont des dérivés comme Ubuntu)
  • Ubuntu (qed et, vraisemblablement, des dérivés comme Mint)
  • Open Suse
  • CentOS (et, vraisemblablement, RHEL)
  • Arch Linux

Je suis sûr qu'il y en a d'autres ... vraisemblablement, les distributions les plus modernes.

Réponse à la question mise à jour "Comment puis-je configurer quelque chose comme atool pour ne pas utiliser la décompression pour extraire les fichiers zip ... et utiliser gunzip à la place" :

Modifiez le fichier de configuration atool ~/.atoolrcet ajoutez la ligne:

path_unzip /usr/bin/gunzip

avec le bon chemin vers votre programme gunzip.

Voir la page de manuel pour la liste complète des variables possibles que vous pouvez mettre dans ce fichier de configuration, dont il y en a beaucoup . Si les options de ligne de commande nécessaires pour gunzip sont différentes de celles de unzip, vous devrez peut-être modifier la source atool (perl) elle-même.

SuperMagic
la source
Merci. Ça a l'air génial. Savez-vous si, en plus de pouvoir télécharger l'archive tar, il existe un référentiel (git / bzr) pour lui, ou peut-être pour un fork de celui-ci?
Amelio Vazquez-Reina
Il ne semble pas y avoir de dépôt git pour cela. Il y a un référentiel cvs: frisson: savannah.nongnu.org/cvs/?group=atool . Cependant, la source est dans l'archive tar et l'outil est écrit en perl, donc facilement modifiable par vous ou toute personne qui en ressent le besoin.
SuperMagic
1
@ user815423426 il est également dans les dépôts Debian.
terdon
9

Voici une petite fonction shell qui prend en charge plusieurs types d'archives.

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
}

J'ai trouvé la version originale de cette fonction quelque part en ligne et l' ai légèrement modifiée pour extraire les ararchives et les tararchives compressées xz .

starbeamrainbowlabs
la source
Ça a l'air génial. Est-ce pour bash?
Amelio Vazquez-Reina
J'ai seulement testé cela avec bashet zsh, mais cela devrait aussi fonctionner avec sh.
Ceci est exceptionnellement agréable pour une fonction de coque. Une mise en garde serait que vous souhaitiez vous assurer d'avoir installé tous les fichiers binaires pertinents, ou supprimer les lignes pour ceux que vous n'avez pas installés.
bgvaughan
3

Le système de fichiers AVFS présente une vue du système de fichiers où chaque fichier d'archive (par exemple /path/to/foo.zip) est accessible en tant que répertoire ( ~/.avfs/path/to/foo/zip#pour cet exemple). AVFS fournit un accès en lecture seule aux formats de fichiers d'archives les plus courants.

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

Avfs utilise des assistants externes qui peuvent être facilement configurés en éditant des fichiers dans /usr(malheureusement, à partir d'avfs 1.0, il n'y a aucun moyen d'utiliser des fichiers dans /usr/localou dans votre répertoire personnel, vous devez éditer des fichiers /usrou recompiler). /usr/share/avfs/extfs/ext-uzipest le script pour gérer les .zipfichiers, changez-le si vous ne voulez pas l'utiliser /usr/bin/unzip. Vous pourrez peut-être vous en sortir en utilisant 7z à la place: essayez de modifier /usr/share/avfs/extfs/extfs.iniet de changer la ligne ext-uzipen u7z .zip.

Gilles 'SO- arrête d'être méchant'
la source