列出一个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 -R
recursion一切 ,但是这通常不是很有用。
但是你可以用find
和tree
来做到这一点。 例如,要列出一个级别的文件和目录,可以这样做
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进去。 那么你可以用其他文件系统来做任何事情。
这似乎比焦油方法更快。