1

我看到一些使用 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 目录。任何帮助将不胜感激。

4

2 回答 2

1
find /opt/web -not -group mygroup | 
grep -v -e IGNORE1 -e IGNORE2 -e IGNORE3 ... |  
xargs -I {} sh -c '{ chmod g+w {}; chgrp mygroup {};}'
于 2015-03-25T20:58:27.573 回答
1

find-path使用和-prune选项可以很好地为您做到这一点。例如,要查找目录/opt/web/DONOTCHGRP下命名的目录以外的所有/opt/web目录:

find /opt/web -path /opt/web/DONOTCHGRP -prune -exec <script> '{}' \;

然后简单地包括你chmod g+w "$1"; chgrp mygroup "$1";的简短并script使其可执行(以上只是为了强调而不是实际命令的一部分)。将为所有文件和目录调用,除了它下面的文件/目录。<>findscript/opt/web/DONOTCHGRP

于 2015-03-25T20:58:13.773 回答