我需要在目录中查找具有当前用户“写入”权限的文件。
我尝试使用find
如下:
find $DIR -type f -user $(whoami) -perm -u+w
但上面的find
寻找$(whoami)
拥有的文件。
我正在寻找的文件可能不属于$(whoami)
但仍具有权限(例如,666,许可)
我也在下面试过(抱歉,如果它看起来很愚蠢):
find $DIR -type f -exec test -w {} \;
你的第二个命令是正确的,你只需要打印路径。通常不必提及-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
永远不会成功。
在你的情况下,这意味着只有在-print
成功时才会执行test -w
。
你的第二种方法似乎走在正确的轨道上;你只是忘了打印文件名。
你可以制作一个剧本
#!/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美元一样。