首页 > 解决方案 > 我可以只对我通过它的名字使用 find 进行可写性测试,而不用递归吗?

问题描述

我有下面的代码,我只是想在/etc/passwd文件中打印用户主目录的权限。我还试图只获取那些仅具有组和世界写入权限的目录。

我能够获取主目录的详细信息,但只能打印主目录中递归存在的所有目录。我只需要打印主目录的值而不是递归地这样做。

for homdir in $(cat /etc/passwd | awk 'BEGIN{FS=":"}{print $6}'); do find $homdir -perm -o+w; done > /tmp/writeperimissions

我希望输出应该只将目录的组和世界可写权限打印到/tmp/writeperimissions(而不是递归地)。

标签: regexlinuxshellawksed

解决方案


用于-maxdepth 0仅匹配项目本身。因此:

while IFS=: read _ _ _ _ _ home _; do
  [[ -d $home ]] || continue # skip directories that do not actually exist
  find "$home" -maxdepth 0 -perm -o+w
done </etc/passwd | tee /tmp/world-writable-homedirs

read传递多个参数时,它会拆分为字符 in IFS(在本例中为:)上的字段,并将每个字段分配给一个由此命名的变量。在这种情况下,我们将前五个字段分配给名为 的变量_,将第六个字段分配给一个名为 的变量home

不传递-rtoread告诉它\:作为文字处理:,因此您可以让用户在其可读名称或 GECOS 字段中带有冒号,而不会放弃解析;这实际上使read基于 - 的解析比基于 - 的解析更准确awk


推荐阅读