2

我正在尝试使用 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

谢谢你的建议!

4

1 回答 1

2

这应该这样做:

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

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

注意:我已将您的更改-depth 2-maxdepth 2并将其移到前面...只是因为 GNU不能这样工作,我相信这就是用 GNU 编写的方式。现在,我不知道你在你的系统上安装了什么,所以 YYMV,就像他们说的......find-depthfindfind

我也会使用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 命令(见下面Dan评论):-depth-maxdepth

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

干杯!

于 2013-11-02T22:11:04.540 回答