在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

签出find的-maxdepth标志

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

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


tree - l2 -u -g -p -d

以深度2 (- l2)的漂亮格式打印目录树。 打印用户(-u)和组(-g)以及权限(-p)。 只打印目录(-d)。 Tree还有很多其他有用的选项。


利用find的选项

实际上不需要执行/bin/ls;

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

find . -maxdepth 2 -type d -ls

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

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

使用输出格式

当显示的细节不同时,-printf可以以自定义格式显示有关文件的任何细节; 要显示文件的符号权限和所有者名称,请使用-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`

or

ls -l $(ls)