Décompresser sous linux en ligne de commande

Si comme moi vous ne vous souvenez jamais de l’incantation magique qui permet de décompresser les fichiers tar.gz et autres linuxeries, voici un pense-bête:

tar xvf truc.tar # untar uniquement
tar xvzf truc.tar.gz # decompresse sur place
tar xvzf truc.tar.gz /chemin/vers/dossier # decompresse dans un dossier
tar jxf truc.tar.bz2 # decompresser bz2
gunzip truc.bz > truc # ungzip uniquement

Et pour les zip/tar, c’est unzip/untar, sans option. Mais il faut les installer à part.

No related posts.

flattr this!

23 comments

  1. - L’option f doit être spécifiée en dernier car c’est elle qui spécifie le fichier à décompresser (tar xvfz -> tar xvzf)
    - Pour les bz2 c’est l’option j et non y
    - Sachant que l’option j ou z est optionnelle :
    man tar:

    Note: When working with archives, specifying the compression option is often times unnecessary as tar will automatically detect the compression type based on the suffix of the archive.

  2. Schnouki

    Avec les versions récentes de GNU tar il n’y a même plus besoin des -z, -j et -J pour .gz, .bz2 et .xz. Un simple “tar xvf machin.tar.gz” fonctionne. (C’est le cas avec le tar distribué par Arch Linux depuis au moins 2 ou 3 ans).
    BSD tar est encore mieux car il gère aussi les .zip de la même manière… (parfois dispo sous le nom “bsdtar” sous Linux)

  3. Je note. Je corrige.

  4. D’ailleurs, si l’un d’entre vous sait comment faire marcher ce snippet pour les noms qui contiennent des espaces ou des ‘, je suis preneurs:

    extract () {
        if [ -f "'"$1"'" ] ; then
            case $1 in
                *.tar.bz2) tar xjf $1 ;;
                *.tar.gz) tar xzf $1 ;;
                *.bz2) bunzip2 $1 ;;
                *.rar) rar x $1 ;;
                *.gz) gunzip $1 ;;
                *.tar) tar xf $1 ;;
                *.tbz2) tar xjf $1 ;;
                *.tgz) tar xzf $1 ;;
                *.zip) unzip $1 ;;
                *.z) uncompress $1 ;;
                *) echo "'$1' cannot be extracted via extract ()" ;;
                esac
            else
                echo "'$1' is not a valid file"
        fi
    }
  5. mon grin de sel. pour extraire un dossier/fichier d’une archive sans la télécharger intégralement :

    wget -q http://foo.bar/toto.tar.gz -O - |tar xvfz - dossier

  6. @Sam : moi j’ai

    xt () {
    	if [ -f $1 ]
    	then
    		case $1 in
    			(*.7z) 7z x $1 ;;
    			(*.lzma) unlzma $1 ;;
    			(*.rar) unrar x $1 ;;
    			(*.tar) tar xvf $1 ;;
    			(*.tar.bz2) tar xvjf $1 ;;
    			(*.bz2) bunzip2 $1 ;;
    			(*.tar.gz) tar xvzf $1 ;;
    			(*.gz) gunzip $1 ;;
    			(*.tar.xz) tar Jxvf $1 ;;
    			(*.xz) xz -d $1 ;;
    			(*.tbz2) tar xvjf $1 ;;
    			(*.tgz) tar xvzf $1 ;;
    			(*.zip) unzip $1 ;;
    			(*.Z) uncompress ;;
    			(*) echo "don't know how to extract '$1'..." ;;
    		esac
    	else
    		echo "Error: '$1' is not a valid file!"
    		exit 0
    	fi
    }

    et ça semble marcher avec des espaces…

  7. Le paquet unp (en perl, dans toutes les bonnes distribs) décompresse tout.
    Sinon, atool, mais je ne l’utilise pas.

  8. J’ai jamais pu me faire a ces commandes de sioux, j’utilise ça.

    C’est un paquet Debian, faut l’installer, mais après t’as une seule commande à retenir : unp tonbousin

  9. moi pour décompresser je prends l’air….

  10. Bon, je crois que je vais passer rapido à unp.

  11. TitusCrow

    (Suis-je le seul à ne pas pouvoir cliquer sur le lien proposé par floweb et caché par le tampon ?)

  12. Je dis rien, mais j’étais preum’s pour unp :)

  13. @titus j’ai viré le tampon, j’espère qu’il ne m’en voudra pas :)

  14. :D pire que des enfants… :)

  15. Sam&Max, le site où on aime prendre de gros tampons… héhé’ ;-)

    Bon, je ne connaissais même pas unp…
    …encore un soir où j’vais me coucher moins con ; putain, j’adore le web (c’est pas avec la TV que j’aurais ça tiens) !

  16. les tampons rouges, c’est crade :D

  17. Baronsed

    Marrant, mais moi je dois utiliser -C pour donner un autre répertoire que le répertoire courant.

  18. @Max c’est bien parce que c’est toi. J’étais tellement fier ! :(

  19. Merci, pour ce petit rappel.
    Bonne continuation à vous deux ;)

  20. De rien pour ce petit rappel.
    Bonne continuation à toi seul :-)

  21. Encore merci et bonne chance, nous sommes de tout coeur avec vous…

    Celui qui trouve l’origine de cette réplique a un tampon :) (sauf sam)

  22. Je plusois @Baronsed : moi aussi, je dois utiliser “-C” pour donner un autre répertoire de destination. Sinon il tente de trouver le répertoire (ou le fichier) dans l’archive.

    tar xvzf truc.tar.gz /
    chemin/dans/l-archive/fichier-a-extraire.txt /
    -C chemin/vers/dossier/de/destination

    Aka

    ps: Peut-être faut-il faire la différence entre chemin relatif et absolu?

  23. Baronsed

    AH !
    Encore mieux que unp : dtrx (do the right extract) ; gère :
    - les formats (bon c’est le but à a la base)
    - les droits <3
    - et quand un connard met une blinde de fichiers à la racine de son archive <3 <3, il crée exprès un dossier pour ça.

    Et si jamais on tombe sur un rép préalablement pourri o/ :
    https://alias.sh/undo-unzip

    Cela dit, ça peut être utile de garder une version commentée de xt() dans son .bashrc pour les cas où on ne peut pas installer ce qu'on veut, etc.

Flux RSS des commentaires

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

Jouer à mario en attendant que les autres répondent