Как я могу просмотреть содержимое файла tar.gz без извлечения из командной строки?

247

Я хочу увидеть содержимое (список файлов и папок) архива, например, tar.gzфайл без его распаковки .

Есть ли способы сделать это?

Авинаш Радж
источник

Ответы:

266

Запустите приведенную ниже команду в терминале, чтобы просмотреть содержимое файла tar.gz без его распаковки:

tar -tf filename.tar.gz

снимок экрана со сжатыми файлами tarball в терминале

-t, --list Вывести
содержимое архива. Аргументы необязательны. Когда дано, они указывают имена членов для списка.

Авинаш Радж
источник
1
делает все эти примеры, чтобы заглянуть внутрь сжатого файла, работает и в других типах форматов. как почтовый индекс, rar, tar и т. д.?
Ciasto piekarz
3
tar -tvf xxx.tgzэто также показывает подробные свойства файлов.
Эрик Ван
4
treetar -tf filename.tar.gz | tree
передайте
Для zip / rar используйте unzip -l/unrar -l
pLumo
Если вы хотите перечислить до определенной глубины / уровня, смотрите только здесь .
holzkohlengrill
120

Вы также можете использовать Vim

vim filename.tar.gz
см
источник
9
Это круто. Вы также можете увидеть содержимое файлов!
Нико
1
Или используйте редактор Ex: ex +%p foo.tar.gz.
Кенорб
@Nico Как вы используете это, чтобы увидеть содержимое файла в TGZ?
1252748 14.12.16
1
Когда вы открываете файл с помощью vim ( vim file.tar.gz), он говорит: «Выберите файл курсором и нажмите ENTER». Вы делаете это, перемещаете курсор на файл и нажимаете ENTER.
Нико
2
С огромным архивом нужно просто набраться терпения. Загрузка структуры папок может быть очень долгой. :-)
Хьюго Х
41

lessможет также открывать gzсжатые и несжатые tarархивы. Это дает вам прекрасный 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
...

И потому, что это так less, вы можете прокручивать его, искать его и т. Д. Однако это не помогает с другими алгоритмами сжатия (по моему опыту).

Оли
источник
5
Не работал для меня Отображается в виде двоичного файла.
JeromeJ
2
Вы уверены, что у вас нет aliasспециальных опций, lessкоторые вы здесь не показываете? Я просто попытался это увидеть, но это не сработало. У меня нет псевдонимов для less.
code_dredd
37

Вы можете использовать команду г: zcat, zless, zgrep.

Для просмотра содержимого файлов используйте:

zcat file.gz   

Чтобы что-то использовать grep:

zgrep test file.gz   

Чтобы проверить разницу между файлами, используйте:

zdiff file1.gz file2.gz

Это всего лишь несколько примеров, есть еще много.

крит
источник
9

tar's -tфлаг будет перечислять содержимое для вас. Добавьте это к другим вашим флагам (например, -tvfza tar.gz, -tvfja tar.bz2и т. Д.), И вы можете просматривать без распаковки. Оттуда вы можете легко извлечь отдельные файлы

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

Большая проблема с tarбудет вспоминать все другие флаги . Поэтому я обычно полагаюсь 7z(из p7zip-fullпакета) на все мои архивы. Я не буду утверждать, что это полностью лучше, но он поддерживает почти все (без указания типа сжатия), и аргументы логичны.

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

Это, конечно, менее способный, но вам не нужна страница руководства, чтобы использовать его.

Также есть Midnight Commander ( mc). Это универсальный задира для квазиграфического управления файлами на основе терминалов, и при небольшом тестировании он просто позволяет просматривать .tar.gzи .7zархивы, и оба . Я не уверен, сколько других это поддерживает.

Оли
источник
Раньше был t-ar, а название действительно означает ленточный архиватор, который выдает последовательный и во многих случаях PIA. Тем более что неизбежный двойной tar + gz это просто жестоко. Также переходит на 7zip сейчас.
Фрэнк Нок
9

Ну, это зависит от файла. Большинство (де) программ сжатия имеют флаг, который перечисляет содержимое архива.

  1. tar/ tar.gz/ tgz/ tar.xz/ tar.bz2/ tbzфайлы

    $ tar tf foo.tgz 
    dir1/
    dir1/subdir1/
    dir1/subdir1/file
    dir1/subdir2/
    dir1/subdir2/file
    dir2/
    
  2. zip файлы

    $ 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 файлы

    $ 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 файлы

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

Это большинство популярных форматов архивов. Имея все это в виду, вы можете написать небольшой скрипт, который использует соответствующую команду в зависимости от расширения файла, который вы ей даете:

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

Сохраните этот скрипт в вашем PATHи сделайте его исполняемым. Затем вы можете перечислить содержимое любого архива:

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

И поскольку кто-то упомянул этот редактор меньшего размера, естественно, emacs также может сделать это:

emacs показывает содержимое архива

Тердон
источник
6

Почему бы не использовать vimдля просмотра вашего архива и открытия файлов (по крайней мере, текстовых файлов):

vim archive.tar.gz

введите описание изображения здесь

Нажмите клавиши со стрелками для прокрутки и, Enterчтобы открыть файл.

Сильвен Пино
источник
4

Midnight Commander ( mc) также имеет хороший просмотрщик сжатых файлов, хотя я считаю это обманом, поскольку mc - файловый менеджер, хотя и текстовый.

Кроме того, если все, что вам нужно, это посмотреть, что находится внутри сжатых архивов, вы можете изучить команду «просмотр» для каждого компрессора. tar tzvfпокажет вам содержимое файла tar, unzip -lсделает это для zip-файла и так далее.

roadmr
источник
2

Использование view filename.tar.gz также будет работать. почти так же, как vim, но без прав на запись.

Джефф
источник
2

lesspipeявляется сценарием оболочки, устанавливаемым по умолчанию как часть lessпакета, который может перечислять содержимое tar.gzархива, а также ряд других распространенных форматов архивных файлов.

$ 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

Он вызывается lessкомандой ( см. Ответ Оли ) в качестве входного препроцессора, если $LESSOPENпеременная окружения установлена ​​соответствующим образом.

Если вы любите приключения, vi /usr/bin/lesspipeпосмотрите на то, какие команды он использует. Для файлов, соответствующих tar.gzрасширению, мы видим, что он использует скрытую функцию tar tzvfвместе с --force-localопцией отключения неясной функции tar, которая в противном случае путала бы двоеточия в имени файла с командой использовать удаленный стример:

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

Обратите внимание, что поскольку он в первую очередь предназначен для препроцессора less, он ничего не выводит, если не распознает тип файла. Я заметил, что некоторые .tar.gzфайлы, которые я скачал, не будут работать, потому что они фактически не используют сжатие gzip, несмотря на имя файла.

anjsimmo
источник
0

Если вы хотите просматривать содержимое определенного файла в архиве, не извлекая архив или не записывая его каким-либо образом, используйте флаг -O (заглавная o) для записи в стандартный вывод вместо файла.

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

Убедитесь, что O стоит перед f, иначе он попытается проанализировать O как имя файла.

Мобус Дорфин
источник