关于linux:如何限制递归文件列表的深度?

How to limit depth for recursive file list?

有没有办法限制Linux中递归文件列表的深度?

我现在使用的命令是:

1
ls -laR > dirlist.txt

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

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

1
2
3
4
5
6
7
8
9
10
11
12
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

编辑:

命令的最终选择:

1
find -maxdepth 2 -type d -ls >dirlist


检查find-maxdepth标志

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

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


利用find的期权

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

find有一个这样的选项:

1
find . -maxdepth 2 -type d -ls

要只查看您感兴趣的一级子目录,请将-mindepth添加到与-maxdepth相同的级别:

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

使用输出格式

当显示的细节不同时,-printf可以自定义格式显示文件的任何细节;要显示文件的符号权限和所有者名称,请使用-printfformat中的%M%u

我后来注意到你想要完整的所有权信息,其中包括这个小组。在符号名格式中使用%g,或在组ID中使用%g(同样,在数字用户ID中也使用%u)

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

这应该给你所需要的细节,只为正确的文件。

我将给出一个示例,显示用户和组的实际不同值:

1
2
3
4
5
6
7
$ sudo find /tmp -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p
'

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

(edited for readability:indented,shorted last line)

业绩说明

虽然执行时间与此类命令基本无关,但性能会提高这里足够大,值得指出:

我们不仅为每个名字保存了一个新的过程——一个巨大的任务-这些信息甚至不需要读取,因为find已经知道了。


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

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