查找权限除 775 / 664 以外的目录和文件

查找权限除 775 / 664 以外的目录和文件

我正在将网站从一台服务器移动到另一台服务器,Git 不存储文件权限等元数据。我需要分别找到不是 775 / 664 的目录和文件。

现在,我正在使用这个拼凑而成的装置:

$ find . -type d -exec ls -la {} \; | grep ^d | grep -v ^drwxrwxr-x
$ find . -type f -exec ls -la {} \; | grep -v ^d | grep -v ^-rw-rw-r-- | grep -v '.git'

虽然这有效,但我觉得它相当老套。有没有更好的方法来做到这一点,也许是一种规范的方法,或者我应该只是黑客?

它在最新的 Ubuntu 版本上运行,并在 Bash 下使用 GNU 工具。

答案1

使用-perm测试find结合-not:

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775匹配权限完全等于775.-perm 664对 执行同样的操作664
  • -not(boolean NOT) 否定接下来的测试,因此它与它所拥有的完全相反:在这种情况下,所有那些不具有正确权限的文件。
  • -o(布尔 OR)将两组测试组合在一起,当其中任何一个测试时进行匹配:它具有最低的优先级,因此它将我们的测试分为两个不同的组。你也可以使用括号更明确地说。这里我们匹配权限不是 的目录775和权限不是 的普通文件664

如果您想要两个单独的目录和文件命令,只需将其切成两半-o并分别使用每一半:

find -type f -not -perm 664
find -type d -not -perm 775

答案2

我不知道你的代码想要实现什么目的。通常,查找权限不正确的文件和目录的原因是为了更改它们。

这就是我在 Ubuntu 16.04 中成功使用的

find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;

这证明了!符号被转义

相关内容