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

247

Je souhaite voir le contenu (liste de fichiers et de dossiers) d'une archive, par exemple un tar.gzfichier sans l'extraire .

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

Avinash Raj
la source

Réponses:

266

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

tar -tf filename.tar.gz

capture d'écran de la liste des fichiers compressés dans le terminal

-t, --list
Répertorie le contenu d'une archive. Les arguments sont facultatifs. Une fois donnés, ils spécifient les noms des membres à lister.

Avinash Raj
la source
1
tous ces exemples pour regarder à l'intérieur d'un fichier compressé fonctionne également sur d'autres types de format. comme zip, rar, goudron etc.?
Ciasto piekarz
3
tar -tvf xxx.tgzcela montrerait aussi les propriétés de détail des fichiers.
Eric Wang
4
dirigez-le pour treevoir une vue d'arbretar -tf filename.tar.gz | tree
blockloop
Pour zip / rar utiliser unzip -l/unrar -l
pLumo
Si vous voulez lister jusqu'à une profondeur / un niveau spécifique , voyez ici .
holzkohlengrill
120

Vous pouvez aussi utiliser vim

vim filename.tar.gz
sm
la source
9
C'est génial. Vous pouvez également voir le contenu des fichiers!
Nico
1
Ou utiliser l' éditeur Ex: ex +%p foo.tar.gz.
Kenorb
@Nico Comment utilisez-vous cela pour voir le contenu d'un fichier dans le tgz?
1252748
1
Lorsque vous ouvrez le fichier avec vim ( vim file.tar.gz), il indique "Sélectionnez un fichier avec le curseur et appuyez sur ENTREE". Pour ce faire, déplacez le curseur sur un fichier et appuyez sur ENTREE.
Nico
2
Avec d’énormes archives, il suffit d’être patient. Il peut être très long de charger la structure de dossiers. :-)
Hugo H
41

lesspeut également ouvrir des archives gzcompressées et non compressées tar. Cela vous donne aussi une belle ls -lsortie de style:

$ 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 parce que c'est possible less, vous pouvez le parcourir, le rechercher, etc. Cependant, il échoue lamentablement avec d'autres algorithmes de compression (selon mon expérience).

Oli
la source
5
Ca n'a pas marché pour moi. Affiché sous forme de fichier binaire.
JeromeJ
2
Vous êtes sûr de ne pas avoir aliasd’options spéciales pour lessce que vous n’affichez pas ici? J'ai juste essayé de voir ça, mais ça n'a pas marché. Je n'ai aucun alias configuré pour less.
code_dredd
37

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

Pour afficher un contenu de fichiers, utilisez:

zcat file.gz   

Pour utiliser quelque chose, utilisez:

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.

krt
la source
9

tarLe -tdrapeau de ' listera le contenu pour vous. Ajoutez-le à vos autres drapeaux (donc -tvfzpour un tar.gz, -tvfjpour un tar.bz2, etc.) et vous pourrez naviguer sans extraire. De là, vous pouvez extraire des fichiers simples assez facilement

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

Le gros problème avec tarse souvenir de tous les autres drapeaux . Donc, je compte habituellement sur 7z(du p7zip-fullpaquet) pour faire tout mon archivage. Je ne prétends pas 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 capable, 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 solution polyvalente pour la gestion de fichiers quasi-graphique basée sur un terminal et, avec quelques essais, elle vous permet simplement de naviguer dans les deux .tar.gzet dans les .7zarchives. Je ne suis pas sûr de combien d'autres il prend en charge.

Oli
la source
t-ar avait l'habitude d'être et le nom signifie en effet archiveur de bande , qui crie séquentielle et est dans de nombreux cas une PIA. D'autant plus que l'inévitable double goudron + gz est cruel. Passons également à 7zip maintenant.
Frank Nocke
9

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

  1. tar/ tar.gz/ tgz/ tar.xz/ tar.bz2/ tbzfichiers

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

    $ 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 des dossiers

    $ 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 des dossiers

     $ 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 tout 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 "$@"
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 PATHet le rendre exécutable. Vous pouvez ensuite lister le contenu de n'importe quelle 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 puisque quelqu'un a mentionné que l'éditeur inférieur, naturellement, emacs peut aussi le faire:

emacs montrant le contenu d'une archive

terdon
la source
6

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

vim archive.tar.gz

entrez la description de l'image ici

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

Sylvain Pineau
la source
4

Midnight Commander ( mc) a également une bonne visionneuse de fichiers compressés, même si j’estime qu’il faut tricher, car mc est un gestionnaire de fichiers, même s'il est basé sur du texte.

De plus, si tout ce que vous voulez, c'est voir ce qu'il y a dans les archives compressées, vous pouvez apprendre la commande "view" pour chaque compresseur. tar tzvfvous montrera le contenu d'un fichier tar, le unzip -lfera pour un fichier zip, etc.

roadmr
la source
2

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

Jeff
la source
2

lesspipeest un script shell installé par défaut dans le lesspackage permettant de répertorier le contenu d'une tar.gzarchive, ainsi que de nombreux autres formats de fichiers d'archives courants.

$ lesspipe example.tar.gz
drwxrwxr-x ubuntu/ubuntu     0 2018-11-16 05:32 example/
-rw-rw-r-- ubuntu/ubuntu     7 2018-11-16 05:32 example/ask.txt
-rw-rw-r-- ubuntu/ubuntu     7 2018-11-16 05:32 example/ubuntu.txt

Il est appelé par la lesscommande ( voir la réponse d'Oli ) en tant que préprocesseur d'entrée si la $LESSOPENvariable d'environnement est définie correctement.

Si vous vous sentez aventureux, surveillez de près vi /usr/bin/lesspipeles commandes qu'il utilise. Pour les fichiers correspondant à l' tar.gzextension, nous pouvons voir qu'il utilise tar tzvfsous le capot avec la --force-localpossibilité de désactiver une fonctionnalité obscure de tarcelle-ci qui confondrait les deux points du nom du fichier avec une commande permettant d'utiliser un lecteur de bande distant:

*.tar.gz|*.tgz|*.tar.z|*.tar.dz)
        tar tzvf "$1" --force-local

Notez qu’étant donné qu’il est principalement conçu comme un préprocesseur less, il n’affiche rien s’il ne reconnaît pas le type de fichier. J'ai remarqué que certains .tar.gzfichiers que j'avais téléchargés ne fonctionnaient pas car ils n'utilisaient pas la compression gzip malgré le nom du fichier.

Anjsimmo
la source
0

Si vous souhaitez afficher le contenu d'un fichier spécifique dans une archive sans extraire l'archive ni écrire sur le disque, utilisez l'indicateur -O (capital o) pour écrire sur stdout au lieu d'un fichier.

tar -Oxvf gerald.tar.gz /path/to/sandra.txt | less

Assurez-vous que le O vient avant le f ou il essaiera d'analyser le O comme un nom de fichier.

Mobus Dorphin
la source