fswatch:更新文件创建权限

fswatch:更新文件创建权限

我有一个目录,我希望在其中创建新文件或目录时更新其权限。

目前,我已经做到了这一点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,结果是某物导致chmodchown 调用有时报告Created事件(除了 OwnerModified和之外IsFile)。我什至遇到了杂散Removed事件,大概是在启动 fswatch 之前删除了测试文件。

在 Linux 上运行(使用 inotify 监视器)没有表现出这种行为:chmod 触发一个AttributeModified事件,而不触发任何其他事件。

这对我来说非常令人惊讶,并解释了您一直在观察的行为(以及我能够重现的行为)。这显然是有记录的行为; fswatch GitHub 存储库有一个 已关闭有关此问题的“无法修复”问题:

如果不同的事件在短时间内源自同一文件,则多个事件可能携带有关同一事件的信息。 (...)fswatch对此无能为力。

上面链接的问题页面还提出了一些解决方法,但似乎都不太令人满意。也许,就您而言,在应用 chmod 和 chown 之前分别检查现有权限和所有权会有所帮助。

相关内容