查找权限不是 775 / 664 的目录和文件

dot*_*hen 29 permissions find

我正在将网站从一台服务器移动到另一台服务器,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'
Run Code Online (Sandbox Code Playgroud)

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

这是在 Bash 下带有 GNU 工具的最新 Ubuntu 版本上运行的。

Mic*_*mer 48

使用-perm试验find与组合-not

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

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

find -type f -not -perm 664
find -type d -not -perm 775
Run Code Online (Sandbox Code Playgroud)

  • 也许请注意,“-not”不是 POSIX 标准;他们用“!”代替。 (2认同)

NZ *_*Dev 5

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

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

find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;
Run Code Online (Sandbox Code Playgroud)

这表明! 符号被转义