Como posso visualizar o conteúdo do arquivo tar.gz sem extrair da linha de comando?

202

Eu quero ver o conteúdo (lista de arquivos e pastas) de um arquivo, por exemplo, um arquivo tar.gz sem extraí-lo .

Existem métodos para fazer isso?

    
por Avinash Raj 19.12.2013 / 06:46

10 respostas

222

Execute o comando abaixo no terminal para ver o conteúdo de um arquivo tar.gz sem extraí-lo:

tar -tf filename.tar.gz

    
por Avinash Raj 19.12.2013 / 06:47
99

Você também pode usar o vim

vim filename.tar.gz
    
por s.m 19.12.2013 / 06:49
36

less também pode abrir gz -compressed e uncompressed tar archives. Também oferece uma linda saída de estilo ls -l :

$ 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
...

E como é less , você pode rolar, pesquisar, etc. No entanto, ele falha miseravelmente com outros algoritmos de compactação (na minha experiência).

    
por Oli 19.12.2013 / 15:00
32

Você pode usar o comando z: zcat , zless , zgrep .

Para visualizar o conteúdo de um arquivo, use:

zcat file.gz   

Para o grep use:

zgrep test file.gz   

Para verificar a diferença entre os arquivos, use:

zdiff file1.gz file2.gz

Estes são apenas alguns exemplos, existem muitos mais.

    
por krt 30.03.2015 / 17:53
9

Bem, isso depende do arquivo. A maioria dos programas de compressão tem um sinalizador que lista o conteúdo de um arquivo.

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

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

    $ 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 arquivos

    $ 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 arquivos

     $ 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%
    

Essa é a maioria dos formatos de arquivo mais populares. Com tudo isso em mente, você pode escrever um pequeno script que use o comando apropriado, dependendo da extensão do arquivo fornecido:

#!/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

Salve esse script no seu PATH e torne-o executável. Você pode então listar o conteúdo de qualquer arquivo:

$ 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)

E como alguém mencionou esse editor menor, naturalmente, o emacs também pode fazer isso:

    
por terdon 30.03.2015 / 18:45
8
<%>tar -t % flag irá listar o conteúdo para você. Adicione isso aos seus outros sinalizadores (então -tvfz para tar.gz , -tvfj para tar.bz2 , etc) e você pode navegar sem extrair. De lá você pode extrair arquivos simples com bastante facilidade

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

O grande problema com tar é lembrando-se de todos os outros sinalizadores . Então eu geralmente confio em 7z (do pacote p7zip-full ) para fazer todo o meu arquivamento. Eu não vou dizer que é totalmente melhor, mas suporta quase tudo (sem ter que especificar o tipo de compressão) e os argumentos são lógicos.

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

É certamente menos capaz, mas você não precisa da página de manual para usá-lo.

Há também o Midnight Commander ( mc ). Este é um bom esquema para o gerenciamento de arquivos baseado em terminais quase gráficos e, com alguns testes leves, permite que você navegue pelos arquivos .tar.gz e .7z . Não tenho certeza de quantos outros ele suporta.

    
por Oli 30.03.2015 / 17:50
6

Por que não usar vim para navegar em seu arquivo e abrir arquivos (pelo menos arquivos semelhantes a texto):

vim archive.tar.gz

Pressione as teclas de seta para rolar e Digite para abrir um arquivo.

    
por Sylvain Pineau 30.03.2015 / 17:43
4

Midnight Commander ( mc ) também tem um bom visualizador de arquivos compactado, embora eu considere isso um pouco trapaceiro, já que mc é um gerenciador de arquivos, embora baseado em texto.

Além disso, se tudo o que você quer é ver o que está dentro dos arquivos compactados, você pode aprender o comando "view" para cada compressor. tar tzvf mostrará o conteúdo de um arquivo tar, unzip -l fará isso para um arquivo zip e assim por diante.

    
por roadmr 30.03.2015 / 17:52
2

lesspipe é um script de shell instalado por padrão como parte do pacote less , que pode listar o conteúdo de um tar.gz archive, bem como um intervalo de outros formatos comuns de arquivos.

$ 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

É chamado pelo comando less ( veja a resposta de Oli ) como um pré-processador de entrada se a variável de ambiente $LESSOPEN estiver configurada apropriadamente.

Se estiver se sentindo aventureiro, faça um pico em vi /usr/bin/lesspipe para ver quais comandos ele usa. Para arquivos que correspondem à extensão tar.gz , podemos ver que ela usa tar tzvf sob o capô junto com a opção --force-local para desativar um recurso obscuro de tar que, de outra forma, confundiria colons no nome do arquivo com um comando para usar uma unidade de fita remota :

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

Observe que, como ele é projetado principalmente como um pré-processador para less , ele não produzirá nada se não reconhecer o tipo de arquivo. Notei que alguns arquivos .tar.gz que eu baixei não funcionavam porque eles não usavam a compressão gzip apesar do nome do arquivo.

    
por 16.11.2018 / 08:10
2

Usando %código% também funcionará. muito da mesma forma que o vim faz, mas sem permissões de gravação.

    
por Jeff 22.01.2018 / 14:44