Comment puis-je afficher le contenu du fichier tar.gz sans extraire de la ligne de commande?

192

Je souhaite voir le contenu (liste des fichiers et dossiers) d’une archive, par exemple un fichier tar.gz sans l’extraire .

Y a-t-il des méthodes pour le faire?

    
posée Avinash Raj 19.12.2013 - 06:46
la source

9 réponses

207

Exécutez la commande ci-dessous dans le terminal pour voir le contenu d’un fichier tar.gz sans l’extraire:

tar -tf filename.tar.gz

    
réponse donnée Avinash Raj 19.12.2013 - 06:47
la source
94

Vous pouvez également utiliser vim

vim filename.tar.gz
    
réponse donnée s.m 19.12.2013 - 06:49
la source
36

less peut également ouvrir les archives gz -compressed et% comp_de%. Cela vous donne aussi une belle sortie de style tar :

$ less ~/src/compiz_0.9.7.8-0ubuntu1.6.debian.tar.gz
drwxrwxr-x 0/0               0 2012-09-21 11:41 debian/
drwxrwxr-x 0/0               0 2012-08-09 13:32 debian/source/
-rw-rw-r-- 0/0              12 2012-08-09 13:32 debian/source/format
-rw-rw-r-- 0/0              25 2012-08-09 13:32 debian/libdecoration0-dev.docs
-rw-rw-r-- 0/0              25 2012-08-09 13:32 debian/compiz-dev.docs
-rw-rw-r-- 0/0             347 2012-08-09 13:32 debian/compiz-core.install
-rw-rw-r-- 0/0             125 2012-08-09 13:32 debian/libdecoration0-dev.install
...

Et comme il s'agit de ls -l , vous pouvez le parcourir, le rechercher, etc. Cependant, il échoue lamentablement avec d’autres algorithmes de compression (selon mon expérience).

    
réponse donnée Oli 19.12.2013 - 15:00
la source
31

Vous pouvez utiliser la commande z: zcat , zless , zgrep .

Pour afficher un contenu de fichier, utilisez:

zcat file.gz   

Utiliser grep quelque chose:

zgrep test file.gz   

Pour vérifier la différence entre les fichiers, utilisez:

zdiff file1.gz file2.gz

Ce ne sont que quelques exemples, il y en a beaucoup plus.

    
réponse donnée krt 30.03.2015 - 17:53
la source
8
L 'indicateur tar de -t affichera le contenu pour vous. Ajoutez cela à vos autres indicateurs (donc -tvfz pour un tar.gz , -tvfj pour un tar.bz2 , etc.) et vous pouvez parcourir sans extraire. De là, vous pouvez extraire des fichiers uniques assez facilement

tar -xvfz mybackup.tar.gz path/to/file

Le gros problème avec tar est de mémoriser tous les autres indicateurs . Donc, je me fie généralement à 7z (du package p7zip-full ) pour faire tout mon archivage. Je ne vais pas prétendre que c'est tout à fait meilleur mais il supporte presque tout (sans avoir à spécifier le type de compression) et les arguments sont logiques.

7z l archive.ext
7z e archive.ext path/to/file

C'est certainement moins performant, mais vous n'avez pas besoin de la page de manuel pour l'utiliser.

Il y a aussi Midnight Commander ( mc ). Il s’agit d’une méthode globale pour la gestion de fichiers quasi-graphique basée sur un terminal et, avec quelques tests légers, vous permet de naviguer dans les archives .tar.gz et .7z . Je ne suis pas sûr du nombre d’autres supports.

    
réponse donnée Oli 30.03.2015 - 17:50
la source
8

Cela dépend du fichier. La plupart des programmes de (de) compression comportent un drapeau qui répertorie le contenu d'une archive.

  1. tar / tar.gz / tgz / tar.xz / tar.bz2 / tbz fichiers

    $ tar tf foo.tgz 
    dir1/
    dir1/subdir1/
    dir1/subdir1/file
    dir1/subdir2/
    dir1/subdir2/file
    dir2/
    
  2. zip fichiers

    $ zip -sf foo.zip 
    Archive contains:
      dir1/
      dir2/
      dir1/subdir1/
      dir1/subdir1/file
      dir1/subdir2/
      dir1/subdir2/file
    Total 6 entries (0 bytes)
    
  3. 7zip fichiers

    $ 7z l foo.7z 
    
    7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
    p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs)
    
    Listing archive: foo.7z
    
    --
    Path = foo.7z
    Type = 7z
    Solid = -
    Blocks = 0
    Physical Size = 168
    Headers Size = 168
    
       Date      Time    Attr         Size   Compressed  Name
    ------------------- ----- ------------ ------------  ------------------------
    2015-03-30 19:00:07 ....A            0            0  dir1/subdir1/file
    2015-03-30 19:00:07 ....A            0            0  dir1/subdir2/file
    2015-03-30 19:07:32 D....            0            0  dir2
    2015-03-30 19:00:07 D....            0            0  dir1/subdir2
    2015-03-30 19:00:07 D....            0            0  dir1/subdir1
    2015-03-30 19:00:06 D....            0            0  dir1
    ------------------- ----- ------------ ------------  ------------------------
                                         0            0  2 files, 4 folders
    
  4. rar fichiers

     $ rar v foo.rar 
    
    RAR 4.20   Copyright (c) 1993-2012 Alexander Roshal   9 Jun 2012
    Trial version             Type RAR -? for help
    
    Archive foo.rar
    
    Pathname/Comment
                      Size   Packed Ratio  Date   Time     Attr      CRC   Meth Ver
    -------------------------------------------------------------------------------
     dir1/subdir1/file
                         0        8   0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
     dir1/subdir2/file
                         0        8   0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
     dir1/subdir1
                         0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
     dir1/subdir2
                         0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
     dir1
                         0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
     dir2
                         0        0   0% 30-03-15 19:07 drwxr-xr-x 00000000 m0  2.0
    -------------------------------------------------------------------------------
        6                0       16   0%
    

C'est la plupart des formats d'archives les plus populaires. En gardant cela à l'esprit, vous pourriez écrire un petit script qui utilise la commande appropriée en fonction de l'extension du fichier que vous lui donnez:

#!/usr/bin/env bash

for file in "[email protected]"
do
    printf "\n-----\nArchive '%s'\n-----\n" "$file"
    ## Get the file's extension
    ext=${file##*.}
    ## Special case for compressed tar files. They sometimes
    ## have extensions like tar.bz2 or tar.gz etc.
    [[ "$(basename "$file" ."$ext")" =~ \.tar$ ]] && ext="tgz"

    case $ext in
        7z)
            type 7z >/dev/null 2>&1 && 7z l "$file" || 
            echo "ERROR: no 7z program installed"
            ;;
        tar|tbz|tgz)
            type tar >/dev/null 2>&1 && tar tf "$file"|| 
            echo "ERROR: no tar program installed"
            ;;
        rar)
            type rar >/dev/null 2>&1 && rar v "$file"|| 
            echo "ERROR: no rar program installed"
            ;;
        zip)
            type zip >/dev/null 2>&1 && zip -sf "$file"|| 
            echo "ERROR: no zip program installed"
            ;;
        *)
            echo "Unknown extension: '$ext', skipping..."
            ;;
    esac
done

Enregistrez ce script dans votre PATH et rendez-le exécutable. Vous pouvez ensuite répertorier le contenu de toute archive:

$ list_archive.sh foo.rar foo.tar.bz foo.tar.gz foo.tbz foo.zip

-----
Archive 'foo.rar'
-----

RAR 4.20   Copyright (c) 1993-2012 Alexander Roshal   9 Jun 2012
Trial version             Type RAR -? for help

Archive foo.rar

Pathname/Comment
                  Size   Packed Ratio  Date   Time     Attr      CRC   Meth Ver
-------------------------------------------------------------------------------
 dir1/subdir1/file
                     0        8   0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
 dir1/file
                     0        8   0% 30-03-15 19:29 -rw-r--r-- 00000000 m3b 2.9
 dir1/subdir1
                     0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
 dir1
                     0        0   0% 30-03-15 19:29 drwxr-xr-x 00000000 m0  2.0
 dir2
                     0        0   0% 30-03-15 19:07 drwxr-xr-x 00000000 m0  2.0
-------------------------------------------------------------------------------
    5                0       16   0%


-----
Archive 'foo.tar.bz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/

-----
Archive 'foo.tar.gz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/

-----
Archive 'foo.tbz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/

-----
Archive 'foo.zip'
-----
Archive contains:
  dir1/
  dir1/subdir1/
  dir1/subdir1/file
  dir1/file
  dir2/
Total 5 entries (0 bytes)

Et comme quelqu'un a mentionné ce petit éditeur, naturellement, emacs peut aussi le faire:

    
réponse donnée terdon 30.03.2015 - 18:45
la source
6

Pourquoi ne pas utiliser vim pour parcourir vos archives et ouvrir des fichiers (au moins des fichiers de type texte):

vim archive.tar.gz

Appuyez sur les touches fléchées pour faire défiler et Entrez pour ouvrir un fichier.

    
réponse donnée Sylvain Pineau 30.03.2015 - 17:43
la source
4

Midnight Commander ( mc ) possède également un bon visualiseur de fichiers compressé, bien que je considère que c'est un peu tricher puisque mc est un gestionnaire de fichiers, même s'il est basé sur du texte.

Aussi, si tout ce que vous voulez est de voir ce qui se trouve dans les archives compressées, vous pouvez apprendre la commande "view" pour chaque compresseur. tar tzvf vous montrera le contenu d'un fichier tar, unzip -l le fera pour un fichier zip, etc.

    
réponse donnée roadmr 30.03.2015 - 17:52
la source
2

Utiliser view filename.tar.gz travaillera également. de la même manière que vim, mais sans les permissions d’écriture.

    
réponse donnée Jeff 22.01.2018 - 14:44
la source

Lire d'autres questions sur les étiquettes