我想查找权限高于 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 ...'