使用OS X中的find来识别正确的权限

时间:2013-11-02 20:29:14

标签: macos bash shell unix find

我正在尝试使用find(或更好的方法,因为这将进入shell脚本)来执行以下操作:

  • 查看/ Users目录
  • 识别权限不是700的任何文件或文件夹,如果是,则将其更改为700,同时忽略“站点和公共”文件夹
  • 文件和文件夹名称中也可能包含空格

这只需要看一层深,即。在/ Users

中具有用户目录的一个级别

这是我到目前为止所提出的,但它并没有完全解决问题:

find /Users ! -perm 0700 -type d -depth 2 | grep -v Public | grep -v Sites | /usr/bin/xargs -0 chmod 700

感谢您的建议!

1 个答案:

答案 0 :(得分:2)

这应该做:

find /Users -maxdepth 2 \! -perm 0700 \! -name Public \! -name Sites -type d -exec chmod 700 {} +

没有管道,只有一个命令:)

注意:我已将您的-depth 2更改为-maxdepth 2并将其移至前面...仅因为GNU find的{​​{1}}不能正常工作我相信这是用GNU -depth编写的。现在,我不知道您在系统上安装了find,所以YYMV就像他们说的那样......

我还会使用find的{​​{1}}选项(如果有的话),只是为了知道发生了什么......例如:

chmod

尝试我给你的命令:

-v

在那里`chmod -v 700 {}` ,所以它是无害的。它只会在屏幕上显示删除find /Users -maxdepth 2 \! -perm 0700 \! -name Public \! -name Sites -type d -exec echo chmod 700 {} + 时将执行的命令。只有在您对其行为方式感到满意时才移除echo

编辑。似乎echo / echo的OS X和GNU版本find不同。所以这是OS X的类似命令(参见Dancomment below):

-depth

干杯!