这是我第一个问题,虽然我一直在潜伏。
问题:我想使用find来获取权限未设置为644(或其他权限值)的目录中的文件。 有没有更简单的方法来写这个或是使用-perm和-or选项的唯一方法,并列出除644以外的每种权限types?
这是我希望加快的一个更大的命令的一部分:
find /path/to/dir/ -type f -print0 | xargs -0 chmod 644
我希望提供xargs只需要更新的文件名将加快速度。 该目录有一百万个文件,但只有〜10,000个,通常需要更新权限。 我觉得这个命令很慢,因为它仍然pipe道所有的文件。 也许对更大的命令有一个更有效的方法。 让我知道如果你知道一个。 我仍然想知道这个问题的答案。 顺便说一下,我不能更新权限之前,将文件添加到目录。
那! 当条件为false时,运算符返回true。
所以,虽然-perm 0644匹配具有rw-r-r–权限集的文件, ! -perm 0644 ! -perm 0644匹配那些没有这些权限的人。
你需要的命令是:
find /path/to/dir/ -type f ! -perm 0644 -print0 | xargs -0 chmod 644
find /path/to/dir ! -perm 0644
和
find /path/to/dir ! -perm 0644 -exec chmod 0644 {} \;
至less用GNU find,你可以用! 用-perm来否定运算符。 例如:
find /path/to/dir ! -perm 644
基于你给的例子,你只是想确保业主至less读/写,每个人都至less读过? 如果是这样,那么你可以用chmod来做:
chmod -R a+r,u+w /path/to/dir/*
一个可能的解决scheme是,如果你有更less的目录,运行chmod -R 644 /path/to/dir然后运行find /path/to/dir -type d -exec chmod 755 {} \; 。