我想查看档案的内容(文件和文件夹列表),例如一个tar.gz文件而没有将其解压缩。

是否有任何方法可以做到这一点?

评论

使用vim浏览文件

#1 楼

在终端中运行以下命令,以查看tar.gz文件的内容而不提取该文件:
tar -tf filename.tar.gz



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


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


评论


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

–Ciasto piekarz
15年8月4日在11:23

tar -tvf xxx.tgz这也将显示文件的详细属性。

–特朗普2020年-正义将到来
17 Mar 21 '17 at 2:10

用管道将其传输到树以查看树视图tar -tf filename.tar.gz |树

– Blockloop
17年4月6日在15:28

对于zip / rar,请使用unzip -l / unrar -l

– pLumo
17年6月9日在13:55



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

–holzkohlengrill
19年8月17日在23:04

#2 楼

您也可以使用vim

vim filename.tar.gz


评论


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

–尼科
14-10-21在13:24

或使用Ex编辑器:ex +%pfoo.tar.gz。

– Kenorb
15年7月23日在14:33

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

–尼科
16 Dec 15'在19:56

拥有大量存档,您只需要耐心等待即可。加载文件夹结构可能很长。 :-)

–Hugo H
17年7月27日在17:03

@TimothyPulliam:q退出当前文件,并带您回到文件列表

–ahota
19年4月10日在18:23

#3 楼

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,因此您可以滚动浏览,搜索它,等等。但是由于其他压缩,它失败了算法(以我的经验)。

评论


没为我工作。显示为二进制文件。

–jeromej
17年12月10日下午16:31

您确定没有别名的特殊选项会减少您在此处未显示的别名吗?我只是试着看,但是没有用。我没有更少的别名设置。

– code_dredd
18年7月20日在22:14

#4 楼

您可以使用z命令:zcatzlesszgrep

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

zcat file.gz   


要grep某些东西,请使用:

zgrep test file.gz   


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

zdiff file1.gz file2.gz


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

#5 楼

好吧,这取决于文件。大多数(解压缩)程序都有一个标志,该标志列出了存档的内容。



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/



zip文件

$ zip -sf foo.zip 
Archive contains:
  dir1/
  dir2/
  dir1/subdir1/
  dir1/subdir1/file
  dir1/subdir2/
  dir1/subdir2/file
Total 6 entries (0 bytes)



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



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



#6 楼

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档案。我不确定它支持多少其他人。

评论


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

–弗兰克·诺克(Frank Nocke)
17-2-25在12:21



#7 楼

为什么不使用vim浏览档案并打开文件(至少是类似文本的文件):

vim archive.tar.gz




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

#8 楼

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

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

#9 楼

也可以使用
view filename.tar.gz
。几乎与vim相同,但是没有写权限。

#10 楼

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命令(请参阅Oli的答案)将其作为输入预处理器调用。

如果您喜欢冒险,请在vi /usr/bin/lesspipe处寻找一个峰值,以查看它的命令用途。对于与tar.gz扩展名匹配的文件,我们可以看到它使用引擎盖下的tar tzvf以及--force-local选项来禁用tar的晦涩功能,否则它将使文件名中的冒号与使用远程磁带机的命令混淆:

*.tar.gz|*.tgz|*.tar.z|*.tar.dz)
        tar tzvf "" --force-local


请注意,因为它主要是作为less的预处理程序设计的,所以如果无法识别文件类型,它将不会输出任何内容。我注意到我下载的某些.tar.gz文件无法正常工作,因为尽管文件名也没有实际使用gzip压缩。

#11 楼

如果要查看归档文件中特定文件的内容而不提取归档文件或以任何方式写入磁盘,请使用-O(大写o)标志而不是文件写入stdout。

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


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