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

问题描述 投票:4回答:2

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

我尝试使用find如下:

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

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

我正在寻找的文件可能不属于$(whoami)但仍具有权限(例如,666,许可)

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

find $DIR -type f -exec test -w {} \;
bash file find
2个回答
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永远不会成功。

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


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美元一样。

© www.soinside.com 2019 - 2024. All rights reserved.