Bash:对于所有组,查找拥有的文件

Posted

技术标签:

【中文标题】Bash:对于所有组,查找拥有的文件【英文标题】:Bash: For all groups, find owned files 【发布时间】:2014-07-15 15:52:44 【问题描述】:

我想为所有组运行find /path1 -group group1

这个概念可能是这样的:groups > array1 | for i in array1 do find /path1 -group array[i]

【问题讨论】:

我会转过头来并以[group] [filename] 的自定义格式列出该路径下的所有文件,然后使用 awk 将其拆分为每个组的单个文件。 【参考方案1】:

您可以使用-lsfind 列出文件信息,然后使用awk 将输出重定向到基于group 值的文件(第6 列):

find /path -ls | awk ' print $0 >> "group_"$6".txt"; '

【讨论】:

【参考方案2】:

您可以通过进程替换在循环中使用它:

while read -d' ' -r g; do
    find . -group "$g"
done < <(groups)

【讨论】:

为什么要处理替换而不是简单的管道groups | while... 管叉在子 shell 中循环,而 process substitution 没有。 感谢您的解释。我今天又学到了一件事!【参考方案3】:

你可以使用

find /path -group group1 -or -group2

for i in group1 group2 ; do find /path1 -group $i ; done 

【讨论】:

【参考方案4】:

我想为所有组运行 find /path1 -group group1

您可以在find 的一个实例中使用:

#!/bin/bash

read -a GRPS < <(exec groups)
ARGS=()
for G in "$GRPS[@]"; do
    ARGS+=("-o" "-group" "$G")
done
ARGS=('(' "$ARGS[@]:1" ')')

find /path1 "$ARGS[@]"

如果您尝试执行echo find /path1 "$ARGS[@]",它会显示如下内容:

find /path1 ( -group root -o -group bin -o -group daemon -o -group sys -o -group adm )

【讨论】:

【参考方案5】:

如果您不关心文件的所有者是哪些组,您可以使用以下命令查找任何已识别组拥有的所有文件:

find /path ! -nogroup

这将列出所有具有可识别所有者组 ID 的文件。

如果您想按他们的组所有权排序,请使用:

find /path -printf '%g:%f\n' |sort

这将输出如下行:

root:.bashrc
users:userfiles

【讨论】:

以上是关于Bash:对于所有组,查找拥有的文件的主要内容,如果未能解决你的问题,请参考以下文章

搜索字符串列表并查找需要更新的文件版本

SQL Server 2008 查找特定用户拥有的数据库

如何更改linux文件的拥有者及用户组

Linux Bash-文件查找

Bash:查找所有.dot文件,但忽略.htaccess文件

python_查找模块的方法