查找权限高于xxx的文件

查找权限高于xxx的文件

我想查找权限高于 640 的所有文件。也许这可以与 find 和 exec 命令配合使用。但我的知识不足以完成这样的任务。

答案1

我想你所追求的是

find -perm -640 ! -perm 640

即搜索至少具有 640 中所有权限且不具有 640 作为权限位的文件。或者,换句话说,在其所有者可读和可写以及组可读的文件中,搜索除所有者之外的其他人可执行或可写的文件或全局可读的文件(假设没有 ACL)。您可能想要添加-type f对常规文件的限制,或者至少! -type d -o -type d -perm 750 ! -perm 750允许目录具有执行权限。

如果你想匹配权限位(解释为整数)高于 0o640 的文件(这实际上没有任何意义),你将不得不枚举几种情况。如果查看按位表示,可以通过两种方式使 0 到 0o777 之间的数字大于 0o640:除了 0o600 位之外还设置 0o100 位,或者设置 0o640 位。! -perm 640如果您希望权限 0o640 匹配,请删除最后一个。

find -perm -700 -o -perm -640 ! -perm 640

答案2

这是一个很棒的命令,您可以编辑它以供自己使用:

find -perm -o+r -exec stat --printf='%A %a %n --- %F\n' {} \;

结果示例:

-rw-r--r-- 644 dir1//file4 --- regular file
lrwxrwxrwx 777 dir1/file5 --- symbolic link

查找具有其他人读取权限的文件。然后以符号和八进制形式打印权限、文件路径和文件类型。

答案3

这是您可以使用的一行:

find . -type f -printf %p:%m\\n | while read x; do name=${x%:*}; perm=${x#*:}; if [[ $perm -gt 640 ]]; then echo $name; fi done

此命令查找当前路径中的所有常规文件,并打印它们的名称 ( %p) 和权限 ( %m),并用冒号分隔。每行输出都被进一步读入一个变量$x,然后分为变量$name$perm

${x%:*}方法返回 x 的值,并删除其后缀

${x#:*}方法返回 x 的值,并删除其前缀

如果文件的权限与条件匹配,则打印文件名。

PS:为了简单使用,可以给命令指定一个别名:

alias advfind='find ...'

相关内容