我需要在一个目录中查找对于当前用户具有"写"权限的文件。
我尝试使用以下命令来使用find
:
find $DIR -type f -user $(whoami) -perm -u+w
然而,上述的 find
查找的是由 $(whoami)
拥有的文件。
我要查找的文件可能不属于 $(whoami)
,但仍具备权限(例如,666 权限)。
我还尝试了下面这个(如果看起来很蠢请见谅):
find $DIR -type f -exec 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。
-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
。
find
命令除了已有的-executable
和-readable
操作之外,还提供了-writeable
选项,那么这将变得非常简单。 - Socowi