Unix shell: 递归查找所有文件和目录的 chgrp,单个命名目录除外
Unix shell: Recursive find to chgrp on all files and dirs EXCEPT a single named dir
我看到一些与我使用修剪操作类似的请求,但我想做的是递归地浏览文档根目录:
/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
使用 -path
和 -prune
选项可以很好地满足您的需求。例如,要在 /opt/web
目录下查找除名为 /opt/web/DONOTCHGRP
的目录之外的所有目录:
find /opt/web -path /opt/web/DONOTCHGRP -prune -exec <script> '{}' \;
然后简单地将你的 chmod g+w ""; chgrp mygroup "";
包含在一个简短的 script
中并使其可执行(上面的 <
和 >
只是为了强调而不是实际的一部分命令)。 find
将为所有文件和目录调用 script
,/opt/web/DONOTCHGRP
及其下方的 files/dirs 除外。
find /opt/web -not -group mygroup |
grep -v -e IGNORE1 -e IGNORE2 -e IGNORE3 ... |
xargs -I {} sh -c '{ chmod g+w {}; chgrp mygroup {};}'
我看到一些与我使用修剪操作类似的请求,但我想做的是递归地浏览文档根目录:
/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
使用 -path
和 -prune
选项可以很好地满足您的需求。例如,要在 /opt/web
目录下查找除名为 /opt/web/DONOTCHGRP
的目录之外的所有目录:
find /opt/web -path /opt/web/DONOTCHGRP -prune -exec <script> '{}' \;
然后简单地将你的 chmod g+w ""; chgrp mygroup "";
包含在一个简短的 script
中并使其可执行(上面的 <
和 >
只是为了强调而不是实际的一部分命令)。 find
将为所有文件和目录调用 script
,/opt/web/DONOTCHGRP
及其下方的 files/dirs 除外。
find /opt/web -not -group mygroup |
grep -v -e IGNORE1 -e IGNORE2 -e IGNORE3 ... |
xargs -I {} sh -c '{ chmod g+w {}; chgrp mygroup {};}'