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

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

Существуют ли какие-либо методы для этого?

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

tar -tf filename.tar.gz

screenshot of listing compressed tarball files in the terminal

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

-f, --file=Archiveиспользуйте архивный файл или АРХИВ устройства...

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

vim filename.tar.gz

less может также открывать gz-сжатый и несжатый tar архивы. Это дает вам прекрасный ls -l вывод стиля тоже:

$ less ~/src/compiz_0.9.7.8-0ubuntu1.6.debian.tar.gzdrwxrwxr-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, вы можете прокручивать его, искать в нем и т.д. Однако он терпит неудачу с другими алгоритмами сжатия (по моему опыту).

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

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

zcat file.gz   

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

zgrep test file.gz   

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

zdiff file1.gz file2.gz

Это всего лишь несколько примеров, их гораздо больше.

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

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

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

    $ zip -sf foo.zip Archive contains:  dir1/  dir2/  dir1/subdir1/  dir1/subdir1/file  dir1/subdir2/  dir1/subdir2/fileTotal 6 entries (0 bytes)
  3. 7zip файлы

    $ 7z l foo.7z 7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs)Listing archive: foo.7z--Path = foo.7zType = 7zSolid = -Blocks = 0Physical Size = 168Headers Size = 168   Date      Time    Attr         Size   Compressed  Name------------------- ----- ------------ ------------  ------------------------2015-03-30 19:00:07 ....A            0            0  dir1/subdir1/file2015-03-30 19:00:07 ....A            0            0  dir1/subdir2/file2015-03-30 19:07:32 D....            0            0  dir22015-03-30 19:00:07 D....            0            0  dir1/subdir22015-03-30 19:00:07 D....            0            0  dir1/subdir12015-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 2012Trial version             Type RAR -? for helpArchive foo.rarPathname/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 bashfor 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..."            ;;    esacdone

Сохраните этот сценарий в своем 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 2012Trial version             Type RAR -? for helpArchive foo.rarPathname/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/filedir1/filedir2/-----Archive 'foo.tar.gz'-----dir1/dir1/subdir1/dir1/subdir1/filedir1/filedir2/-----Archive 'foo.tbz'-----dir1/dir1/subdir1/dir1/subdir1/filedir1/filedir2/-----Archive 'foo.zip'-----Archive contains:  dir1/  dir1/subdir1/  dir1/subdir1/file  dir1/file  dir2/Total 5 entries (0 bytes)

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

emacs showing an archive's contents

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

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

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

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

Это, конечно, менее эффективно, но вы этого не делаете необходимость справочная страница, чтобы использовать ее.

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

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

vim archive.tar.gz

enter image description here

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

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

$ lesspipe example.tar.gzdrwxrwxr-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, несмотря на имя файла.

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

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

С помощью view filename.tar.gz тоже будет работать. во многом так же, как это делает vim, но без разрешений на запись.

Используйте “vim” для просмотра файлов