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

时间:2014-07-15 15:52:44

标签: bash pipe user-permissions

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

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

5 个答案:

答案 0 :(得分:1)

您可以在循环中使用进程替换

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

  

我想运行 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 )

答案 3 :(得分:0)

您可以使用

find /path -group group1 -or -group2

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

答案 4 :(得分:0)

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

find /path ! -nogroup

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

如果您想按照群组所有权订购,请使用以下命令:

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

将输出这样的行:

root:.bashrc
users:userfiles