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

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

Есть ли какие-нибудь методы для этого?

1
задан 30 March 2015 в 20:13

8 ответов

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

vim filename.tar.gz
87
ответ дан 24 May 2018 в 13:56
  • 1
    Это круто. Вы также можете увидеть содержимое файлов! – Nico 21 October 2014 в 18:24
  • 2
    Или используйте редактор Ex: ex +%p foo.tar.gz. – kenorb 23 July 2015 в 17:33
  • 3
    @Nico Как вы используете это, чтобы увидеть содержимое файла в tgz? – 1252748 14 December 2016 в 23:15
  • 4
    Когда вы открываете файл с помощью vim (vim file.tar.gz), он говорит «Выберите файл с помощью курсора и нажмите ENTER». Вы делаете именно это, переместите курсор над файлом и нажмите ENTER. – Nico 15 December 2016 в 23:56
  • 5
    С огромным архивом вам просто нужно быть терпеливым. Очень сложно загрузить структуру папок. :-) – Hugo H 27 July 2017 в 20:03

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, вы можете прокручивать его, искать и т. Д. Однако он терпит неудачу с другими алгоритмами сжатия (в мой опыт).

32
ответ дан 24 May 2018 в 13:56
  • 1
    Не работал для меня. Отображается как двоичный файл. – JeromeJ 10 December 2017 в 20:31

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

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

zcat file.gz   

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

zgrep test file.gz   

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

zdiff file1.gz file2.gz

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

29
ответ дан 24 May 2018 в 13:56

Флаг tar -t отобразит содержимое для вас. Добавьте это к вашим другим флагам (поэтому -tvfz для tar.gz, -tvfj для 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. Я не уверен, сколько других он поддерживает.

8
ответ дан 24 May 2018 в 13:56

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

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/
zip файлов
$ zip -sf foo.zip 
Archive contains:
  dir1/
  dir2/
  dir1/subdir1/
  dir1/subdir1/file
  dir1/subdir2/
  dir1/subdir2/file
Total 6 entries (0 bytes)
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
 $ 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 также может это сделать:

7
ответ дан 24 May 2018 в 13:56

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

vim archive.tar.gz

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

6
ответ дан 24 May 2018 в 13:56

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

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

4
ответ дан 24 May 2018 в 13:56

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

1
ответ дан 24 May 2018 в 13:56

Другие вопросы по тегам:

Похожие вопросы: