【问题标题】:Find files that has write permission for current user查找对当前用户有写权限的文件
【发布时间】:2019-08-01 16:30:09
【问题描述】:

我需要在对当前用户具有“写入”权限的目录中查找文件。

我尝试使用find,如下所示:

find $DIR -type f -user $(whoami) -perm -u+w

但上面的find 会查找$(whoami) 拥有的文件。

我要查找的文件可能不属于$(whoami),但仍有权限(例如,666 权限)

我也在下面尝试过(对不起,如果它看起来很愚蠢):

find $DIR -type f -exec test -w {} \;

【问题讨论】:

  • 如果除了现有的操作-executable-readable 之外,只有find 提供-writeable 选项,这可能会非常简单。

标签: bash file find


【解决方案1】:

您的第二种方法似乎是在正确的轨道上;你只是忘了打印文件名。

你可以写一个脚本

#!/bin/sh
test -w "$1" && echo "$1"

然后在此脚本上使用-exec

更新:如果你不喜欢有一个单独的脚本的想法,你也可以把它放在一行中:

find $DIR -type f -exec bash -c 'test -w "$1" && echo "$1"' x {} \;

唯一的 x 只是用作占位符,因为这就是 bash 所看到的 $0,并且您希望将当前文件分配给 $1。另一种可能是

find $DIR -type f -exec bash -c 'test -w "$0" && echo "$0"' {} \;

但对我来说,这看起来不太清楚,就像滥用 0 美元。

【讨论】:

    【解决方案2】:

    你的第二个命令是正确的,你只需要打印路径。通常-print 不必提及,但对于像-exec 这样的一些选项,您必须明确指定要打印找到的路径。

    find "$DIR" -type f -exec test -w {} \; -print
    

    您可能想知道:»为什么只打印可写文件?«

    find 使用 短路评估 – 仅在前一个选项成功时才评估下一个选项。
    示例:在命令 find -type f -user USER 中检查-user USER 只会对文件执行,而不是对目录执行,因为-type f 对目录失败。

    -exec cmd 选项也用作检查 - cmd 的退出状态将用于确定检查是否通过。
    示例: find -exec false \; -user USER 获胜'永远不要执行检查-user USER,因为程序false 永远不会成功。

    在您的情况下,这意味着只有在 test -w 成功时才会执行 -print

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      相关资源
      最近更新 更多