查找当前用户有写入权限的文件

4

我需要在一个目录中查找对于当前用户具有"写"权限的文件。

我尝试使用以下命令来使用find

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

然而,上述的 find 查找的是由 $(whoami) 拥有的文件。

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

我还尝试了下面这个(如果看起来很蠢请见谅):

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

1
如果find命令除了已有的-executable-readable操作之外,还提供了-writeable选项,那么这将变得非常简单。 - Socowi
2个回答

2

你的第二个方法似乎是正确的方向;你只是忘了打印文件名。

你可以编写一个脚本。

#!/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。


1
你的第二个命令是正确的,你只需要打印出路径。通常情况下,不需要提及 -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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接