我有一个目录,我希望在其中创建新文件或目录时更新其权限。
目前,我已经做到了这一点fswatch
,并且检测到新文件/目录的创建,但是当我更改权限时,脚本会再次被调用,因此我会出现无限循环
#!/bin/bash
fswatch -0 -r --event Created /path/to/my/directory \
| while read -d '' file; do \
echo "file: ${file}"
if [[ -d ${file} ]] ; then
chown xxxx:staff "${file}"
chmod 770 "${file}"
elif [[ -f ${file} ]]; then
chown xxxx:staff "${file}"
chmod 775 "${file}"
fi
done
该脚本用于 macOS High Sierra。
答案1
我在macOS系统上裸试了一下fswatch -r /path/to/my/directory
,结果是某物导致chmod
和chown
调用有时报告Created
事件(除了
OwnerModified
和之外IsFile
)。我什至遇到了杂散Removed
事件,大概是在启动 fswatch 之前删除了测试文件。
在 Linux 上运行(使用 inotify 监视器)没有表现出这种行为:chmod 触发一个AttributeModified
事件,而不触发任何其他事件。
这对我来说非常令人惊讶,并解释了您一直在观察的行为(以及我能够重现的行为)。这显然是有记录的行为; fswatch GitHub 存储库有一个 已关闭有关此问题的“无法修复”问题:
如果不同的事件在短时间内源自同一文件,则多个事件可能携带有关同一事件的信息。 (...)
fswatch
对此无能为力。
上面链接的问题页面还提出了一些解决方法,但似乎都不太令人满意。也许,就您而言,在应用 chmod 和 chown 之前分别检查现有权限和所有权会有所帮助。