【发布时间】:2015-03-25 20:45:05
【问题描述】:
我看到一些使用 prune 操作的请求与我的请求相似,但我想做的是递归地浏览 docroot:
/opt/web
其中包含多个文件和目录:
/opt/web/foo.html (file)
/opt/web/bar.txt (file)
/opt/web/DONOTCHGRP (dir)
/opt/web/assets (dir)
我想浏览整个 docroot,如果任何文件不属于“mygroup”组,则将组更改为“mygroup”并设置组写入权限位,但完全忽略 DONOTCHGRP 目录本身及其内容。
我目前有执行 chgrp/chmod 的命令,没有过滤任何内容:
find /opt/web -not -group mygroup |
xargs -I {} sh -c '{ chmod g+w {}; chgrp mygroup {};}'
我只是不知道如何完全跳过 DONOTCHGRP 目录。任何帮助将不胜感激。
【问题讨论】:
-
一个选项,不一定是最好的,是首先运行一个不受限制的更改组,然后第二个是撤消之前需要长期更改的更改组。这是否明智取决于更改目录的风险。另一种选择是将目录移开,留下符号链接。
find不遵循符号链接,除非您强制它这样做。然后,您可以将目录移回。第二种模式可以最大限度地减少出现风险的时间。
标签: shell unix recursion find chgrp