查找不属于特定用户的文件
Posted
技术标签:
【中文标题】查找不属于特定用户的文件【英文标题】:Looking for files NOT owned by a specific user 【发布时间】:2011-08-21 02:43:22 【问题描述】:我希望递归地查看目录以,但我不知道如何编写。
【问题讨论】:
【参考方案1】:寻找不属于某人的文件
其他人已在正文中回答了问题“不属于特定用户”。这是一个回答了名义问题但尚未提供的问题:
$ find / -nouser
你可以这样使用它:
$ sudo find /var/www -nouser -exec chown root:apache \;
还有一个相关的:
$ find / -nogroup
【讨论】:
我会给你投票支持技术性,但如果他们的意思是你所解释的,人们通常会说“不归任何人所有”。 @Shibumi - 是的,听起来很适合那些分裂的头发。我面临的问题是,我需要找到实际上不属于任何用户的文件。它在 Web 服务器刷新和迁移后浮出水面。一些用户/组 id 发生了变化,所以我需要编写一个 chown 脚本。【参考方案2】:使用z-shell(zsh)可以使用
ls -laR *(^U)
或
ls -la **/*(^U)
递归搜索所有不属于您的文件。
【讨论】:
确实,上面的命令不会列出点文件,即使带有-a
标志,因为通配符扩展。要捕获点文件,请使用 zsh dotglob
选项:setopt dotglob
。在一行中:(setopt dotglob; ls **/*(^U) )
。括号将在子shell中运行,这样您就不必在完成后运行setopt nodotglob
。
@Zorawar 您也可以在括号中添加D
:ls **/*(D^U)
。
@MarcCornellà 你是对的;我不知道。谢谢你。如果它是一次性使用,这比必须使用 setopt 更好。【参考方案3】:
find(1) 实用程序具有可以使用“!”取反(“反转”)的初选。操作员。然而,在提示符处必须用反斜杠转义否定,因为它是一个 shell 元字符。结果:
find . \! -user foo -print
【讨论】:
转义!
似乎是可选的
通过管道输出到xargs -I -P3 -- $cmdhere
可以让 $cmdhere 对每个文件进行并行操作。 cmdhere ::= 标准 unix utils;标准 unix utils ::= chmod, chown, stat, ls, ...
@sorin 你的意思是find . ...
还是管道到xargs
是第一种还是第二种方式?
发现有 -exec 标志 -> find . ! -user foo -exec chown <owner>:<group> \;
@sorin:如果 Bash 历史记录处于活动状态 (set -H
),则感叹号必须转义,通常默认情况下处于启用状态。【参考方案4】:
你可以用这个:
find <dir> ! -user <username>
【讨论】:
投反对票,因为它没有向接受的答案添加任何内容,并且它掩盖了其他可能的答案(例如下面的 zsh glob 模式)。【参考方案5】:-user
按用户或用户 ID 查找,!
反转谓词。所以,! -user ...
。
【讨论】:
投反对票,因为它没有向接受的答案添加任何内容,并且它掩盖了其他可能的答案(例如下面的 zsh glob 模式)。以上是关于查找不属于特定用户的文件的主要内容,如果未能解决你的问题,请参考以下文章