当前位置: 首页>>技术教程>>正文


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

,

问题描述

我想查看归档文件的内容(文件和文件夹的列表),例如tar.gz文件而不提取它。

有没有办法做到这一点?

最佳解决方案

在终端上运行以下命令以查看tar.gz文件的内容而不提取它,

tar -tf filename.tar.gz

command-line,ubuntu

次佳解决方案

你也可以使用vim

vim filename.tar.gz

第三种解决方案

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,所以你可以滚动浏览它,搜索它等等。然而,使用其他压缩算法(根据我的经验)却失败了。

第四种方案

您可以使用z命令:zcatzlesszgrep

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

zcat file.gz   

要使用某些东西:

zgrep test file.gz   

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

zdiff file1.gz file2.gz

这些仅仅是一些例子,还有更多。

第五种方案

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)。这是用于quasi-graphical terminal-based文件管理的all-around badass,通过一些轻量测试,您可以浏览.tar.gz.7z存档。我不确定有多少人支持。

第六种方案

那么,这取决于文件。大多数(de)压缩程序都有一个标记,列出存档的内容。

  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也可以这样做:

command-line,ubuntu

第七种方案

为什么不使用vim浏览您的档案并打开文件(至少是text-like文件):

vim archive.tar.gz

command-line,ubuntu

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

第八种方案

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

另外,如果您只想查看压缩存档内的内容,则可以了解每台压缩机的”view”命令。 tar tzvf将向您显示tar文件的内容,unzip -l将为zip文件执行此操作,依此类推。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/249.html,未经允许,请勿转载。