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


243

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

Чи є якісь методи для цього?

Відповіді:


261

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

tar -tf filename.tar.gz

скріншот списку стислих файлів тарболу в терміналі

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


1
чи всі ці приклади для пошуку стисненого файлу також працюють і в інших форматах. як zip, rar, tar тощо?
Ciasto piekarz

3
tar -tvf xxx.tgzце також показало б детальні властивості файлів.
Ерік Ван

4
труба, treeщоб побачити подання на деревоtar -tf filename.tar.gz | tree
blockloop

Для zip / rar використання unzip -l/unrar -l
pLumo

Якщо ви хочете внести список до певної глибини / рівня, дивіться лише тут .
holzkohlengrill

119

Ви також можете використовувати vim

vim filename.tar.gz

8
Це круто. Ви також можете побачити вміст файлів!
Ніко

1
Або використовуйте редактор Ex: ex +%p foo.tar.gz.
kenorb

@Nico Як ви використовуєте це для перегляду вмісту файлу в tgz?
1252748

1
Коли ви відкриєте файл de з vim ( vim file.tar.gz), він говорить "Виберіть файл курсором і натисніть ENTER". Ви просто зробите це, перемістіть курсор на файл і натисніть клавішу ENTER.
Ніко

2
Маючи величезний архів, потрібно просто набратися терпіння. Завантажити структуру папок може дуже довго. :-)
Hugo H

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


4
Не працювало для мене. Відображається у вигляді двійкового файлу.
JeromeJ

2
Ви впевнені, що у вас немає aliasспеціальних варіантів, lessякі ви тут не показуєте? Я просто спробував це побачити, але не вийшло. У мене немає налаштування псевдонімів less.
code_dredd

36

Ви можете використовувати команду г: zcat, zless, zgrep.

Для перегляду вмісту файлів використовуйте:

zcat file.gz   

Щоб схопити щось, використовуйте:

zgrep test file.gz   

Щоб перевірити різницю між файлами, використовуйте:

zdiff file1.gz file2.gz

Це лише кілька прикладів, є ще багато.


9

tar«S -tпрапор буде список вмісту для вас. Додайте це до своїх інших прапорів (наприклад, -tvfzдля a tar.gz, -tvfjдля a 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

Це, звичайно, менш спроможне, але для його використання вам не потрібна сторінка "man".

Є також командир опівночі ( 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 є файловим менеджером, хоча і текстовим.

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


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, незважаючи на ім’я файлу.


0

Якщо ви хочете переглянути вміст певного файлу в архіві, не вилучаючи архіву чи записуючи на диск будь-яким способом, використовуйте прапор -O (з великої літери) для запису в stdout замість файлу.

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

Переконайтесь, що O надходить до f або він спробує розібрати O як ім'я файлу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.