如何在不从命令行提取的情况下查看tar.gz文件的内容?


Answers:


260

在终端中运行以下命令,以查看tar.gz文件的内容而不解压缩它:

tar -tf filename.tar.gz

在终端中列出压缩的tarball文件的屏幕截图

-t,--
list列出档案的内容。参数是可选的。如果给出,则它们指定要列出的成员的名称。


1
是否所有这些示例都可以在压缩文件内部查找其他类型的格式。如zip,rar,tar等?
Ciasto piekarz

3
tar -tvf xxx.tgz这还将显示文件的详细属性。
Eric Wang

4
用管道将其查看tree以查看树视图tar -tf filename.tar.gz | tree
blockloop '17

对于ZIP / RAR使用unzip -l/unrar -l
pLumo

如果要列出直到特定的深度/级别,请在此处查看
holzkohlengrill

119

您也可以使用vim

vim filename.tar.gz

8
这太棒了。您还可以看到文件的内容!
Nico 2014年

1
或使用Ex编辑器:ex +%p foo.tar.gz
kenorb

@Nico您如何使用它来查看tgz中文件的内容?
1252748 '16

1
当您使用vim(vim file.tar.gz)打开文件时,它会显示“使用光标选择文件并按ENTER”。只需执行此操作,将光标移到文件上,然后按Enter。
Nico

2
拥有大量档案,您只需要耐心等待即可。加载文件夹结构可能很长。:-)
雨果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
没为我工作。显示为二进制文件。
杰罗姆·J(JeromeJ)

2
您确定您没有在此处未显示的alias特殊选项less吗?我只是想看看,但是没有用。我没有为设置任何别名less
code_dredd

36

你可以使用Z命令:zcatzlesszgrep

要查看文件内容,请使用:

zcat file.gz   

要grep某些东西,请使用:

zgrep test file.gz   

要检查文件之间的差异,请使用:

zdiff file1.gz file2.gz

这些只是几个例子,还有更多。


9

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

它的功能肯定较差,但是您不需要手册页即可使用它。

还有午夜指挥官(mc)。对于基于准图形终端的文件管理,这是一个全方位的难题,并且通过一些轻量测试,可以让您同时浏览.tar.gz.7z归档。我不确定它支持多少其他人。


t-ar曾经是,它的名称确实代表了磁带存档器,它连续尖叫着,在许多情况下是PIA。特别是不可避免的双焦油+ gz,这简直太残酷了。现在也移至7zip。
Frank Nocke

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



4

Midnight Commander(mc)也具有良好的压缩文件查看器,尽管我认为这有点作弊,因为mc 文件管理器,尽管是基于文本的文件管理器。

另外,如果您只想查看压缩档案中的内容,则可以学习每个压缩器的“查看”命令。tar tzvf将显示tar文件的内容,unzip -l将其显示为zip文件,依此类推。


2

使用 view filename.tar.gz 也可以。和vim一样,但是没有写权限。


2

lesspipe是默认情况下作为less程序包的一部分安装的Shell脚本,它可以列出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命令作为输入预处理器由命令调用(请参阅Oli的答案$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(大写o)标志而不是文件写入stdout。

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

确保O位于f之前,否则它将尝试将O解析为文件名。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.