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

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
    
1 个评论
你能不能也像ls -la /var/www/vhosts/*那样?
linux
bash
Jon
Jon
发布于 2010-12-22
4 个回答
Alberto Zaccagni
Alberto Zaccagni
发布于 2019-10-28
已采纳
0 人赞同

Checkout the -maxdepth flag of find

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

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

由于OP想知道目录本身的权限,你应该把-d选项添加到ls中。
@Peter van der Heijden:我只是写了find部分来解决他的主要问题。总之谢谢你,我正在添加它。
I use -print0 and xargs -0 a lot. Example: find . -maxdepth 1 -type d -print0 | xargs -0 ls -d
哦,是的,肯定看起来不对,虽然6年前没有:D我已经评论过了。stackoverflow.com/a/25618630/57095这应该是公认的答案。
Volker Siegel
Volker Siegel
发布于 2019-10-28
0 人赞同

Make use of find's options

实际上不需要/bin/ls的exec。

Find有一个选项就是这样做的。

find . -maxdepth 2 -type d -ls

要想只看到你感兴趣的一级子目录,请将-mindepth-maxdepth添加到同一级别。

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

Use output formatting

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

我注意到后来你想要完整的所有权信息,其中包括 组。用%g的格式来表示符号名称,或者用%G来表示组的ID(就像用%U来表示数字用户ID)。

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

(为便于阅读而编辑:缩进,缩短了最后一行)

Notes on performance

尽管执行时间对这种命令来说是无关紧要的,但性能的提高在这里是足够大的,值得指出。 足够大,所以值得指出来。

我们不仅节省了为每个名字创建一个新的程序--一个huge任务 - 这些信息甚至不需要阅读,因为find已经知道它。

这应该是公认的答案,比我的好得多。
@AlbertoZaccagni 我想我们喜欢简短的答案,以迅速让事情运作。
Sameer
Sameer
发布于 2019-10-28
0 人赞同

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

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

Eric
在某些情况下,只要tree -L 2 xxx/tree -L 2 -d xxx/就足够了。
recolic
recolic
发布于 2019-10-28
0 人赞同

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

我在玩我的鱼时发现了一个简单的解决方案,它完全符合你的需要。

ll `ls`