如何获取Linux中目录中每个文件的所有者?

时间:2014-07-09 15:48:54

标签: linux bash centos

我需要检查root是否是特定目录中每个文件的所有者。我能做到

stat --format=%u /directory/name/here 

获取目录本身的所有者,但不获取其中的文件。

我的另一个想法是

ls -lL | grep "^-\|^d" | cut -d ' ' -f 2

但如果权限中的最后一个字节是空格而不是'。'。

,那么这不起作用

如果重要的话,这也是CentOS。

4 个答案:

答案 0 :(得分:2)

您可以使用find

find /tmp -type f -printf '%u\n' | sort -u
lightdm
root
tiago

如果您需要数字形式的UID,例如使用stat

find /tmp -type f -printf '%U\n' | sort -u
0
1000
104

答案 1 :(得分:1)

你问两个不同的问题。

  

我需要检查root是否是特定目录中每个文件的所有者

要查找root所拥有的任何文件,您可以执行以下操作:

find /yourdir ! -user root

如果它返回任何文件名,则root不是特定目录中每个文件的所有者。

  

如何获取Linux中目录中每个文件的所有者?

使用用户名:

打印目录中的每个文件
find /yourdir -printf '%u %p\n'

如果最后一步是chown不归root所有的文件,那么您只需执行chown -R root /yourdir,因为在将chowing root的文件中没有任何害处根

答案 2 :(得分:0)

尝试

 find /your/dir/ -type f -exec stat --format='%u %n' '{}' \;

我添加了%n来显示文件名。

阅读find(1)了解有关find的更多信息....您可能希望-max_depth 1避免深入/your/dir/

答案 3 :(得分:0)

for F in /directory/*; do stat --format='%u' "$F"; done

并可选择添加dotglob选项以匹配以...开头的文件。以及:

shopt -s dotglob
for F in /directory/*; do stat --format='%u' "$F"; done

* --format相当于-c