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

时间:2010-12-22 13:28:02

标签: linux bash

有没有办法限制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

4 个答案:

答案 0 :(得分:435)

查看-maxdepth

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

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

答案 1 :(得分:76)

使用find的选项

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

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

find . -maxdepth 2 -type d -ls

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

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


使用输出格式

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

我后来注意到你想要完整的所有权信息,其中包括 群组。以符号名称的格式使用%g,或使用%G作为组ID(对于数字用户ID也使用%U

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

这可以为您提供所需的详细信息,仅提供正确的文件。

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

$ 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已经知道了。

答案 2 :(得分:60)

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

以漂亮的格式打印目录树,深度为2(-L 2)。 打印用户(-u)和组(-g)以及权限(-p)。 仅打印目录(-d)。 树有很多其他有用的选择。

答案 3 :(得分:0)

  

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

我在玩鱼时发现了一个简单的解决方案,非常适合您的需求。

ll `ls`

ls -l $(ls)