我正在将网站从一台服务器移动到另一台服务器,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
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 {} \;
这证明了!符号被转义