【问题标题】:Finding files and directories with different umask查找具有不同 umask 的文件和目录
【发布时间】:2016-08-29 11:09:59
【问题描述】:

我有一个使用 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 权限(目录权限)的文件

【问题讨论】:

    标签: bash shell find chmod


    【解决方案1】:
    find . -type f ! -perm $(echo "obase=8;$(( 8#666 ^ 8#$(umask) ))"|bc)
    

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

    【讨论】:

    • 这会导致 436 而不是应有的 664
    • @trolkura 更新完成,忘记重新转换十进制结果。
    【解决方案2】:

    最坏情况的解决方案是根据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
    

    ...不为那个骄傲。

    【讨论】:

      【解决方案3】:

      这是我的版本:

      m=`umask`
      fperm=`printf '0%o' $(( 0666 & ~$m ))`
      dperm=`printf '0%o' $(( 0777 & ~$m ))`
      
      find -type f -perm $fperm -o -type d -perm $dperm
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-10
        • 1970-01-01
        • 2022-10-17
        • 2014-06-12
        • 2012-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多