如何限制递归文件列表的深度?

在linux中是否有一种方法来限制递归文件列表的深度?

我现在使用的命令是:

ls -laR > dirlist.txt

我有大约200个目录,每个目录有10个目录。所以这会花费很长时间,占用太多系统资源。

我真正感兴趣的是第一级子目录的所有权和权限信息:

drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/htdocs
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/cgi-bin
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/htdocs
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/cgi-bin
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/htdocs
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/cgi-bin
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/htdocs
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/cgi-bin

编辑:

最终的命令选择:

find -maxdepth 2 -type d -ls >dirlist
405277 次浏览

签出find-maxdepth标志

find . -maxdepth 1 -type d -exec ls -ld "{}" \;

这里我使用1作为最大层次深度,-type d表示只查找目录,然后ls -ld以长格式列出目录的内容。

tree -L 2 -u -g -p -d

以一种漂亮的格式打印目录树,直到深度2 (- l2)。 打印用户(-u)和组(-g)以及权限(-p)。 只打印目录(-d)。

.树有很多其他有用的选项

使用find的选项

实际上不需要/bin/ls的exec;

Find有一个选项可以做到这一点:

find . -maxdepth 2 -type d -ls

为了只查看你感兴趣的一层子目录,将-mindepth添加到与-maxdepth相同的级别:

find . -mindepth 2 -maxdepth 2 -type d -ls

使用输出格式

当显示的详细信息不同时,-printf可以以自定义格式显示有关文件的任何详细信息; 要显示文件的符号权限和所有者名称,请在format.

. conf中使用-printf%M%u 我后来注意到您想要完整的所有权信息,其中包括 该集团。使用%g作为符号名称的格式,或%G作为组id(也像%U作为数字用户id)

find . -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'

这将为您提供所需的文件的详细信息。

我将给出一个例子,展示user和group的不同值:

$ sudo find /tmp -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'
drwx------ www-data  www-data /tmp/user/33
drwx------ octopussy root     /tmp/user/126
drwx------ root      root     /tmp/user/0
drwx------ siegel    root     /tmp/user/1000
drwxrwxrwt root      root     /tmp/systemd-[...].service-HRUQmm/tmp

(为提高可读性,经过编辑:缩进,最后一行缩短)


性能说明

虽然这类命令的执行时间大多无关紧要,但性能提高 是否大到值得指出:

我们不仅节省了为每个名称创建一个新进程-一个巨大的任务- 这些信息甚至不需要读取,因为find已经知道它

我真正感兴趣的是第一级子目录的所有权和权限信息。

我在玩我的鱼时找到了一个简单的解决方案,完全符合你的需要。

ll `ls`

ls -l $(ls)