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

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

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

188 голосов | спросил Avinash Raj 19 ThuEurope/Moscow2013-12-19T09:46:55+04:00Europe/Moscow12bEurope/MoscowThu, 19 Dec 2013 09:46:55 +0400 2013, 09:46:55

9 ответов


206

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

tar -tf filename.tar.gz

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

ответил Avinash Raj 19 ThuEurope/Moscow2013-12-19T09:47:45+04:00Europe/Moscow12bEurope/MoscowThu, 19 Dec 2013 09:47:45 +0400 2013, 09:47:45
94

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

vim filename.tar.gz
ответил s.m 19 ThuEurope/Moscow2013-12-19T09:49:48+04:00Europe/Moscow12bEurope/MoscowThu, 19 Dec 2013 09:49:48 +0400 2013, 09:49:48
35

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

ответил Oli 19 ThuEurope/Moscow2013-12-19T18:00:48+04:00Europe/Moscow12bEurope/MoscowThu, 19 Dec 2013 18:00:48 +0400 2013, 18:00:48
30

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

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

zcat file.gz   

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

zgrep test file.gz   

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

zdiff file1.gz file2.gz

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

ответил krt 30 MarpmMon, 30 Mar 2015 18:53:53 +03002015-03-30T18:53:53+03:0006 2015, 18:53:53
8

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 , Я не уверен, сколько других он поддерживает.

ответил Oli 30 MarpmMon, 30 Mar 2015 18:50:28 +03002015-03-30T18:50:28+03:0006 2015, 18:50:28
8

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

  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 "[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

Сохраните этот сценарий в 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, показывающий содержимое архива

ответил terdon 30 MarpmMon, 30 Mar 2015 19:45:47 +03002015-03-30T19:45:47+03:0007 2015, 19:45:47
6

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

vim archive.tar.gz

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

<p> Нажмите клавиши со стрелками для прокрутки и <kbd> Ввод </kbd>, чтобы открыть файл. </p></body></html>

ответил Sylvain Pineau 30 MarpmMon, 30 Mar 2015 18:43:39 +03002015-03-30T18:43:39+03:0006 2015, 18:43:39
4

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

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

ответил roadmr 30 MarpmMon, 30 Mar 2015 18:52:28 +03002015-03-30T18:52:28+03:0006 2015, 18:52:28
2

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

ответил Jeff 22 Jpm1000000pmMon, 22 Jan 2018 16:44:14 +030018 2018, 16:44:14

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132