寻找非某人拥有的档案


182

我正在寻找递归地浏览目录,以查找不属于特定用户的文件,而且我不确定如何编写此文件。

Answers:


274

find(1)实用程序具有可以使用“!”取反(“取反”)的基元。操作员。但是,在提示符下必须使用反斜杠来逃避否定,因为它是一个外壳元字符。结果:

find . \! -user foo -print

6
逃避!似乎是可选的
doub1ejack

1
将输出传递到管道,xargs -I{} -P3 -- ${cmdhere} {}可以使$ {cmdhere}在每个文件上并行操作。cmdhere :: =标准的Unix utils; 标准unix utils :: = chmod,chown,stat,ls,...
Dwight Spencer 2014年

1
@sorin是指第一种或第二种方法的find . ...或管道xargs
凯夫

3
查找具有-exec标志-> find . ! -user foo -exec chown <owner>:<group> {} \;
pastephens

1
如何添加所有者信息作为输出?

38

寻找非某人拥有的档案

其他人回答了体内“不是特定用户所有”的问题。这是一个回答名义问题但尚未提供的问题:

$ find / -nouser

您可以这样使用它:

$ sudo find /var/www -nouser -exec chown root:apache {} \;

和一个相关的:

$ find / -nogroup

3
我将对技术性进行投票,但是如果人们想表达您的意思,那么人们通常会说“不归任何人所有”。
Shibumi

2
@Shibumi-是的,听起来适合那些头发劈开的人。我面临的问题是,我需要查找实际上不属于任何用户的文件。Web服务器刷新和迁移后,它浮出水面。一些用户/组ID发生了变化,因此我需要编写chown脚本。
jww


9

您可以使用此:

find <dir> ! -user <username> 

2
拒绝投票,因为它不会为接受的答案添加任何内容,并且会掩盖其他可能的答案(例如下面的zsh glob模式)。
Ulysse BN

5

使用z-shell(zsh)可以使用

ls -laR *(^U)

要么

ls -la **/*(^U)

递归搜索您不拥有的所有文件。


确实,-a由于通配符扩展,以上命令不会列出点文件,即使带有标志也是如此。要捕获点文件,请使用zsh dotglob选项:setopt dotglob。在一行中:(setopt dotglob; ls **/*(^U) )。括号将在子外壳中运行,以便您不必setopt nodotglob在完成后再运行。
佐拉瓦尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.