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


21

我正在将网站从一台服务器移到另一台服务器,并且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'

尽管这行得通,但我觉得它很hacky。有没有更好的方法可以做到这一点,也许是一种规范的方法,还是我应该变得顽强?

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

Answers:


39

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

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775匹配权限完全等于的所有文件775-perm 664的功能相同664
  • -not (布尔NOT)否定随后的测试,因此它与将要进行的测试完全相反:在这种情况下,所有那些没有正确权限的文件。
  • -o(布尔值OR)将两组测试组合在一起,并在它们中的任何一个匹配时匹配:它具有最低的优先级,因此将我们的测试分为两个不同的组。您也可以使用括号使之更加明确。在这里,我们将目录的权限设置为非775,将普通文件的权限设置为非664

如果您需要用于目录和文件的两个独立命令,只需将其切成两半,-o然后分别使用。


美丽,谢谢!我不知道可以设置两个不同的条件(例如,类型-d和类型-f),也不知道-perm。
dotancohen 2014年

也许请注意,这-not不是POSIX标准。他们使用!代替。
user1404316

2

我不知道您的代码正在尝试实现什么。通常,查找具有错误权限的文件和目录的原因是为了更改它们。

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

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

这说明了!符号被转义


实际上,目标不是更改文件的权限,而是确定将文件上载到生产Web服务器时需要雪花权限的文件。谢谢。
dotancohen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.