Bash

fswatch:在創建時更新文件權限

  • December 21, 2018

我有一個目錄,我想在裡面創建一個新文件或目錄來更新他們的權限。

現在,我實現了它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。

我在 macOS 系統上嘗試了一個 bare fswatch -r /path/to/my/directory,結果發現是某些原因導致chmodandchown 呼叫有時會報告一個Created事件(除了 OwnerModifiedand之外IsFile)。我什至得到了雜散Removed事件,大概是在啟動 fswatch 之前刪除了測試文件。

在 Linux 上執行(使用 inotify 監視器)沒有表現出這種行為: chmod 觸發一個AttributeModified事件,沒有別的。

這對我來說非常令人驚訝,並解釋了您一直覺察到的行為(並且我已經能夠重現)。這顯然是記錄在案的行為;fswatch GitHub 儲存庫對此有一個 已關閉的“無法修復”問題

如果不同的事件在短時間內來自同一個文件,那麼多個事件可能攜帶有關同一事件的資訊。(…)fswatch對此無能為力。

上面連結的問題頁面還提出了一些解決方法,但似乎都不是很令人滿意。也許,在您的情況下,分別在應用 chmod 和 chown 之前檢查現有權限和所有權會有所幫助。

引用自:https://unix.stackexchange.com/questions/490351