我想查看档案的内容(文件和文件夹列表),例如 未提取tar.gz
文件的文件。
有什么方法可以做到吗?
我想查看档案的内容(文件和文件夹列表),例如 未提取tar.gz
文件的文件。
有什么方法可以做到吗?
Answers:
在终端中运行以下命令,以查看tar.gz文件的内容而不解压缩它:
tar -tf filename.tar.gz
-t,--
list列出档案的内容。参数是可选的。如果给出,则它们指定要列出的成员的名称。
tar -tvf xxx.tgz
这还将显示文件的详细属性。
tree
以查看树视图tar -tf filename.tar.gz | tree
unzip -l
/unrar -l
您也可以使用vim
vim filename.tar.gz
ex +%p foo.tar.gz
。
vim file.tar.gz
)打开文件时,它会显示“使用光标选择文件并按ENTER”。只需执行此操作,将光标移到文件上,然后按Enter。
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
,所以您可以滚动浏览,搜索它等等。但是(以我的经验),它在其他压缩算法上失败了。
alias
特殊选项less
吗?我只是想看看,但是没有用。我没有为设置任何别名less
。
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
归档。我不确定它支持多少其他人。
好吧,这取决于文件。大多数(解压缩)程序都有一个标志,该标志列出了存档的内容。
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也可以做到这一点:
为什么不使用vim
浏览存档并打开文件(至少是类似文本的文件):
vim archive.tar.gz
按箭头键滚动并Enter打开文件。
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压缩。