只列出某个级别的 tar 文件或目录的内容

问题描述 投票:0回答:7

我想知道如何仅列出某个级别的 tar 文件的内容?

我知道

tar tvf mytar.tar
将列出所有文件,但有时我只想查看某个级别的目录。

同样,对于命令

ls
,如何控制将显示的子目录的级别?默认情况下,它只会显示直接子目录,但不会进一步显示。

bash tar ls depth
7个回答
189
投票

深度=1

tar --exclude="*/*" -tf file.tar


深度=2

tar --exclude="*/*/*" -tf file.tar

40
投票
tar tvf scripts.tar | awk -F/ '{if (NF<4) print }'


drwx------ glens/glens       0 2010-03-17 10:44 scripts/
-rwxr--r-- glens/www-data 1051 2009-07-27 10:42 scripts/my2cnf.pl
-rwxr--r-- glens/www-data  359 2009-08-14 00:01 scripts/pastebin.sh
-rwxr--r-- glens/www-data  566 2009-07-27 10:42 scripts/critic.pl
-rwxr-xr-x glens/glens     981 2009-12-16 09:39 scripts/wiki_sys.pl
-rwxr-xr-x glens/glens    3072 2009-07-28 10:25 scripts/blacklist_update.pl
-rwxr--r-- glens/www-data 18418 2009-07-27 10:42 scripts/sysinfo.pl

请务必注意,由于用户名/组中的 /,因此无论您想要多少级别,该数字都是 3+。如果你这样做

tar tf scripts.tar | awk -F/ '{if (NF<3) print }'

scripts/
scripts/my2cnf.pl
scripts/pastebin.sh
scripts/critic.pl
scripts/wiki_sys.pl
scripts/blacklist_update.pl
scripts/sysinfo.pl

只剩下两个了。

您可以将

ls -R
的输出通过管道传输到此
awk
脚本,并具有相同的效果。


10
投票

另一个选项是archivemount。你安装它,然后 cd 进去。然后你可以用它做任何事情,就像使用其他文件系统一样。

$ archivemount /path/to/files.tgz /path/to/mnt/folder

看起来比tar方法更快。


6
投票

我同意 leonbloy 的回答 - 没有办法在 tarball 本身内直接执行此操作。

关于问题的第二部分,

ls
没有最大深度选项。您可以使用 ls -R 递归
一切
,但这通常不是很有用。

但是,您可以同时使用

find
tree
来完成此操作。例如,要列出一层深度的文件和目录,您可以这样做

find -maxdepth 2

tree -L 2

tree
还有一个
-d
选项,它递归地列出目录,但不列出文件,我发现它通常比
-L
有用得多。


6
投票

如果我们能够告诉

find
命令查看 tar 文件,那就太好了,但我怀疑这是可能的。

我快速而丑陋(而且不是万无一失)的方法是限制目录分隔符的数量,例如:

 $ tar tvf myfile.tar | grep -E '^[^/]*(/[^/]*){1,2}$'

2 告诉显示不超过 2 个斜杠(在我的例子中,斜杠已经由用户/组分隔符生成),因此最多显示一个深度的文件。您可能想尝试使用不同的数字来代替 2。


1
投票

我能够使用 grep 仅显示特定深度的 directory 名称:

深度

3
:

tar -tf mytar.tar | grep -Ex '([^/]+/){3}'

或深度

$DEPTH
:

tar -tf mytar.tar | grep -Ex '([^/]+){$DEPTH}/'

您可以通过将 @sacapeao 的

接受的答案
中的
grep
--exclude 组合来加快速度。

对于深度 3:

tar --exclude '*/*/*/*/*' -tf mytar.tar | grep -Ex '([^/]+/){3}'

0
投票
$ tar -tf mytar.tar | tree -L 2 --fromfile # 2 levels
© www.soinside.com 2019 - 2024. All rights reserved.