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結果は次のとおりです。 時々イベントを報告する原因とchmod呼び出し(および除く)。 fswatchを起動する前にテストファイルを削除するなどの問題も発生しました。chownCreatedOwnerModifiedIsFileRemoved

Linuxで実行すると(inotifyモニタを使用)、この動作は発生しません。 chmod はAttributeModified1 つのイベントのみ発生し、他のイベントは発生しません。

これは私にとって非常に驚くべきことであり、あなたが観察した(そして私が再現できた)動作を説明します。これは明らかに文書化された動作です。 fswatch GitHubリポジトリに この問題に関する「修正できない」質問が終了しました。:

短い時間内に同じファイルでさまざまなイベントが発生した場合、複数のイベントが同じイベントに関する情報を渡すことができます。 (...)fswatchそれについて何もできません。

上記の問題ページでもいくつかの解決策を提案していますが、それらのどれもそれほど満足していません。おそらくあなたの場合、chmodとchownをそれぞれ適用する前に、既存の権限と所有権を確認するのが役立ちます。

おすすめ記事