我正在将网站从一台服务器移动到另一台服务器,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
find -type d -not -perm 775 -o -type f -not -perm 664
Run Code Online (Sandbox Code Playgroud)
-perm 775
匹配权限完全等于775
. -perm 664
对664
.-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)
我不知道你的代码试图实现什么。通常,查找权限不正确的文件和目录的原因是为了更改它们。
所以这就是我在 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)
这表明! 符号被转义