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

有没有办法限制在linux中recursion文件列表的深度?

我目前使用的命令是:

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 

编辑:

命令的最终select:

 find -maxdepth 2 -type d -ls >dirlist 

检出-maxdepth标志

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

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

利用find的选项

实际上不需要/bin/ls

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

 find . -maxdepth 2 -type d -ls 

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

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

使用输出格式

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

我后来注意到你想要完整的所有权信息,其中包括组。 在符号名称格式中使用%g ,或在组ID中使用%G (与数字用户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 

(为可读性编辑:缩进,缩短的最后一行)

性能注意事项

尽pipe执行时间对于这种命令来说大部分是无关紧要的,但是在这方面的性能提升足够大,值得指出:

我们不仅保存为每个名称创build一个新的进程 – 一个巨大的任务 – 甚至不需要阅读信息,因为它已经知道了。

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

以深度2(-L 2)的相当格式打印目录树。 打印用户(-u)和组(-g)和权限(-p)。 只打印目录(-d)。 树有很多其他有用的选项。