代码之家  ›  专栏  ›  技术社区  ›  kittygirl

当运行“post checkout”钩子时,如何只影响已更改的文件夹和文件?

git
  •  0
  • kittygirl  · 技术社区  · 6 年前

    我想在结账后设置完全权限。 post-checkout 脚本如下:

    #!/bin/bash
    echo "This is post-checkout hook"
    checkoutType=$3
    find -not -path "./git/*" -exec chmod -R a+rwx {} \;
    

    但是这个剧本会花费很多时间。
    如何只更改chmod之后的文件夹和文件 checkout ?

    1 回复  |  直到 6 年前
        1
  •  1
  •   iBug    6 年前

    先进的 find !

    find -not -path "./git/*" -not -perm 0777 -exec chmod -R a+rwx {} \;
                              ^^^^^^^^^^^^^^^
    

    正如你可能想象的,是的,这和它看起来一样直观——它告诉我们 找到 只处理没有0777的文件和目录(或 rwxrwxrwx )许可。

    或者,为了避免过度调用 chmod ,你可以使用 xargs :

    find -not -path "./git/*" -not -perm 0777 -print0 | xargs -0 chmod a+rwx
    

    稍微调整一下 参数代换 你会跑 CHMOD 只有一次,节省了大量时间,提高了整体性能。见 max xargs 更多信息。