/ 的子级中的主目录数

/ 的子级中的主目录数

我必须计算 / 包含一个或多个主目录的子目录的数量。例如,如果 john、emily 和 rick 的主目录位于 /home/john 、 /home/emily 和 /var/lib 中,则答案为 2。

我认为我必须使用带有 cut 和 grep 的管道,但我不知道具体如何操作。

答案1

(export LC_ALL=C
getent passwd | cut -d: -f6 | sort -t/ -uk2,2 | grep -c ..)

计算用户主目录的唯一第二个组成部分的数量。

  • LC_ALL=Cuniq当我们使用或时通常需要sort -u
  • getent passwd以 csv(冒号分隔)形式返回帐户数据库(假设可以枚举,但对于联网的数据库并不总是如此)
  • cut -d: -f6提取每条记录的第 6 个字段(主目录)
  • sort -t/ -uk2,2对第二个目录组件进行排序,并且-u为每个唯一排序键仅保留一条记录
  • grep -c ..计算包含至少两个字符的行数,以排除/(或者grep -cvx /:)

+ cut+可以替换sortgrep一次调用awk

getent passwd | awk -F: '{split($6, p, "/")}
                         p[2] != "" && !seen[p[2]]++ {n++}
                         END {print n}'

相关内容