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

Avi*_*Raj 331 command-line

我希望看到的档案内容(文件和文件夹列表),例如 tar.gz文件,而不提取它。

有没有办法做到这一点?

Avi*_*Raj 368

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

tar -tf filename.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

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

-f, --file=ARCHIVE 使用存档文件或设备 ARCHIVE...

  • 管道它到`tree` 以查看树视图`tar -tf filename.tar.gz | 树` (9认同)
  • `tar -tvf xxx.tgz` 这也将显示文件的详细属性。 (7认同)
  • @blockloop 嗯,除非我是个十足的白痴,否则只会列出当前目录的内容 - 而不是 tarfile。联机帮助页根本没有提到标准输入;[此参考](https://unix.stackexchange.com/a/491235/12095)似乎与我的发现相符。(树1.7.0。) (2认同)

s.m*_*s.m 147

你也可以使用vim

vim filename.tar.gz
Run Code Online (Sandbox Code Playgroud)

  • 这太棒了。您还可以查看文件的内容! (11认同)
  • 当您使用 vim (`vim file.tar.gz`) 打开 de 文件时,它会显示“使用光标选择文件并按 ENTER”。您只需这样做,将光标移到文件上并按 ENTER。 (4认同)
  • 对于庞大的档案,您只需要耐心等待。加载文件夹结构可能会很长。:-) (4认同)
  • 或者使用 Ex 编辑器:`ex +%p foo.tar.gz`。 (2认同)
  • @TimothyPulliam `:q` 退出当前文件并将您带回文件列表 (2认同)

Oli*_*Oli 47

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
...
Run Code Online (Sandbox Code Playgroud)

并且因为它是less,您可以滚动浏览它,搜索它等。但是它与其他压缩算法(以我的经验)悲惨地失败了。

  • 没有为我工作。显示为二进制文件。 (10认同)
  • 你确定你没有一个 `alias` 带有 `less` 的特殊选项,你没有在这里显示吗?我只是想看看,但没有用。我没有为 `less` 设置任何别名。 (3认同)

krt*_*krt 43

您可以使用 z 命令:zcat, zless, zgrep

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

zcat file.gz   
Run Code Online (Sandbox Code Playgroud)

要使用 grep 某些东西:

zgrep test file.gz   
Run Code Online (Sandbox Code Playgroud)

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

zdiff file1.gz file2.gz
Run Code Online (Sandbox Code Playgroud)

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


ter*_*don 13

嗯,这取决于文件。大多数(解)压缩程序都有一个标志,用于列出档案的内容。

  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/
    
    Run Code Online (Sandbox Code Playgroud)
  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)
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  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%
    
    Run Code Online (Sandbox Code Playgroud)

这是大多数更流行的存档格式。考虑到所有这些,您可以编写一个小脚本,根据您提供给它的文件的扩展名使用适当的命令:

$ tar tf foo.tgz 
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/subdir2/
dir1/subdir2/file
dir2/
Run Code Online (Sandbox Code Playgroud)

将该脚本保存在您的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)
Run Code Online (Sandbox Code Playgroud)

而且既然有人提到了那个小编辑器,自然而然,emacs 也可以做到这一点:

显示档案内容的 emacs


Oli*_*Oli 9

tar-t标志将为您列出内容。将其添加到您的其他标志(例如-tvfza tar.gz-tvfjatar.bz2等),您无需提取即可浏览。从那里你可以很容易地提取单个文件

tar -xvfz mybackup.tar.gz path/to/file
Run Code Online (Sandbox Code Playgroud)

最大的问题tar记住所有其他标志。所以我通常依靠7zp7zip-full包的)来做我所有的归档。我不会声称它完全更好,但它支持几乎所有内容(无需指定压缩类型)并且参数是合乎逻辑的。

7z l archive.ext
7z e archive.ext path/to/file
Run Code Online (Sandbox Code Playgroud)

它当然功能较弱,但您不需要手册页即可使用它。

还有午夜指挥官(mc)。这是一个全方位的坏蛋的准基于图形终端的文件管理,并与一些光测试,它只是让你浏览到两个.tar.gz.7z档案。我不确定它支持多少其他人。


Syl*_*eau 7

为什么不用vim来浏览您的存档和打开文件(至少是类似文本的文件):

vim archive.tar.gz
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

按箭头键滚动并Enter打开文件。


roa*_*dmr 5

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

此外,如果您只想查看压缩档案中的内容,您可以学习每个压缩器的“查看”命令。tar tzvf将向您显示 tar 文件的内容,unzip -l将为 zip 文件执行此操作,等等。


anj*_*mmo 5

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
Run Code Online (Sandbox Code Playgroud)

如果环境变量设置适当,它会被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
Run Code Online (Sandbox Code Playgroud)

请注意,因为它主要被设计为 的预处理器less,所以如果它不能识别文件类型,它将不会输出任何内容。我注意到.tar.gz我下载的某些文件不起作用,因为尽管有文件名,它们实际上并没有使用 gzip 压缩。