【问题标题】:Looking for files NOT owned by a specific user查找不属于特定用户的文件
【发布时间】:2011-08-21 02:43:22
【问题描述】:

我希望递归地查看目录以查找不属于特定用户的文件,但我不知道如何编写。

【问题讨论】:

    标签: linux file shell search


    【解决方案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 您也可以在括号中添加Dls **/*(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 模式)。
    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2016-07-18
    • 2014-09-26
    • 2021-02-12
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多