在 Linux 上仅查找目录中权限未设置为 644 的文件

在 Linux 上仅查找目录中权限未设置为 644 的文件

尽管我已经潜水有一段时间了,但这是我的第一个问题。

问题:我想使用 find 来获取目录中权限未设置为 644(或其他权限值)的文件。有没有更简便的方法来编写此代码,或者唯一的方法是仅使用 -perm 和 -or 选项并列出除 644 之外的每种权限类型?

这是我希望加快速度的更大命令的一部分:

find /path/to/dir/ -type f -print0 | xargs -0 chmod 644

我希望只向 xargs 提供需要更新的文件名可以加快速度。该目录有大约一百万个文件,但通常只有大约 10,000 个需要更新权限。我认为该命令很慢,因为它无论如何仍在传输所有文件。也许对较大的命令有更有效的方法。如果您知道,请告诉我。不过我仍然想知道这个问题的答案。顺便说一句,在将文件添加到目录之前,我无法更新权限。

答案1

!当条件为假时,运算符返回真。

因此,虽然-perm 0644匹配设置了 rw-r--r-- 权限的文件,但! -perm 0644匹配没有这些权限的文件。

您需要的命令是:

find /path/to/dir/ -type f ! -perm 0644 -print0 | xargs -0 chmod 644

答案2

  find /path/to/dir ! -perm 0644 

    find /path/to/dir ! -perm 0644 -exec chmod 0644 {} \;

答案3

至少在 GNU find 中,你可以使用 ! 运算符和 -perm 进行否定。例如:

find /path/to/dir ! -perm 644

根据您给出的示例,您是否只是想确保所有者至少具有读/写权限,并且每个人都至少具有读权限?如果是这样,那么您可以使用 chmod 来做到这一点:

chmod -R a+r,u+w /path/to/dir/*

答案4

一个可能的解决方案是,如果您的目录较少,则运行 a chmod -R 644 /path/to/dir,然后运行 ​​a find /path/to/dir -type d -exec chmod 755 {} \;

相关内容