列出一个tar文件或目录的内容只能到一定的级别

我不知道如何列出一个tar文件的内容只有一些水平?

我理解tar tvf mytar.tar将列出所有文件,但有时我只想看到目录下降到一定程度。

同样,对于命令ls ,我如何控制将要显示的子目录的级别? 默认情况下,它只显示直接的子目录,但不能继续。

 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脚本,并且具有相同的效果。

深度= 1

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

深度= 2

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

我同意leonbloy的回答 – 在tarball本身内部没有办法直接做到这一点。

关于你的问题的第二部分, ls没有最大深度选项。 你可以用ls -Rrecursion一切 ,但是这通常不是很有用。

但是你可以用findtree来做到这一点。 例如,要列出一个级别的文件和目录,可以这样做

 find -maxdepth 2 

要么

 tree -L 2 

tree也有一个-d选项,recursion列出目录,但不是文件,一般来说,我发现它比-L更有用。

如果我们能够通过find命令查看一个tar文件,这将是一件好事,但我怀疑这是可能的。

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

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

2告诉显示不超过2个斜杠(在我的情况下,已经由用户/组分隔符生成),因此,显示文件的深度最多一个。 你可能想用不同的数字代替2。

另一个select是档案 。 你挂载它,然后cd进去。 那么你可以用其他文件系统来做任何事情。

这似乎比焦油方法更快。