使用不同的umask查找文件和目录

时间:2016-05-04 06:54:02

标签: bash shell find chmod

我使用umask -S的umask 0002返回u=rwx,g=rwx,o=rx.

如何找到现在根据掩码设置权限的所有文件和目录?

目录为777 - mask,文件为666 - mask如果我执行类似

的操作
find . ! -perm $(umask -S)

它会找到没有权限设置为u = rwx,g = rwx,o = rx(777 - 002有权利但666 - 002是不同权限)的所有文件/目录,这对目录有好处,但是不是为了文件。

如何查找与当前设置umask具有不同权限的文件?

例如

 touch one
 ls -l
 -rw-rw-r-- 1 trolkura trolkura 0 kvě  4 09:01 one

umask是0002所以这导致664,但是当我做

find . -type f ! -perm $(umask -S)
./one

结果是新创建的文件bcs它正在查找没有775权限的文件(目录权限)

3 个答案:

答案 0 :(得分:1)

这是我的版本:

m=`umask`
fperm=`printf '0%o' $(( 0666 & ~$m ))`
dperm=`printf '0%o' $(( 0777 & ~$m ))`

find -type f -perm $fperm -o -type d -perm $dperm

答案 1 :(得分:0)

find . -type f ! -perm $(echo "obase=8;$(( 8#666 ^ 8#$(umask) ))"|bc)

这是对八进制数的二进制xor运算。由于-perm接受八进制权限,十进制结果再次转换为八进制。

答案 2 :(得分:0)

最糟糕的解决方案是根据umask ...

设置案例

如果你的umask u=rwx,g=rwx,o=rx是你可以找到像这样的邪恶666的文件:

 find . -type f ! -perm u=rw,g=rw,o=r

如果你的umask u=rwx,g=rx,o=rx,那么你使用另一个字符串......

 find . -type f ! -perm u=rw,g=r,o=r

......并不以那个为荣。