首页 文章

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

提问于
浏览
272

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

EDIT:

最终选择命令:

find -maxdepth 2 -type d -ls >dirlist

3 回答

  • 70

    查看 find-maxdepth 标志

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

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

  • 393

    使用find的选项

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

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

    find . -maxdepth 2 -type d -ls
    

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

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

    使用输出格式

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

    我后来注意到你需要完整的所有权信息,其中包括该组 . 使用符号名称格式的 %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
    

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

    关于绩效的说明

    虽然执行时间与这种命令大多无关,但是性能的提升足够大,值得指出:

    我们不仅为每个名称保存创建一个新进程 - 一个 huge 任务 - 甚至不需要读取信息,因为 find 已经知道了 .

  • 49

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

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

相关问题