如何计算每个用户/组组合有多少个文件?我需要对每个目录树 /etc、/usr 和 /var 中存在的每个用户/组组合执行此操作。
答案1
find . -type f -printf %u:%g\\n | awk '{usergroup[$0]++}; END {for(key in usergroup) printf "%-20s %d\n",key,usergroup[key]}'
hl:hauke 401
hl:1003 10
root:root 1
find
为每个文件打印一行这样的内容username:groupname
。
awk
使用关联数组来计算出现次数。对于每一行,以行内容作为名称的变量都会递增。
读取最后一行后,awk
它会打印数组的键和值。
答案2
对于 /etc /usr /var 中的 i; do (find $i -type f -printf "$i -> %u:%g\n" 2> /dev/null) |排序|唯一-c;完毕
输出:
2 /etc -> root:dip 1 /etc -> root:fuse 7 /etc -> root:lp 2441 /etc -> root:root 2 /etc -> root:shadow ...
我循环遍历您想要的目录(/etc、/usr 和 var)。我使用 find 命令查找目录中的所有文件,并使用 printf 显示目录以及用户和组,将任何错误重定向到 /dev/null。我对结果进行排序,然后进行唯一计数,输出数字和唯一字符串。