Bash
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。
我在 macOS 系統上嘗試了一個 bare
fswatch -r /path/to/my/directory
,結果發現是某些原因導致chmod
andchown
呼叫有時會報告一個Created
事件(除了OwnerModified
and之外IsFile
)。我什至得到了雜散Removed
事件,大概是在啟動 fswatch 之前刪除了測試文件。在 Linux 上執行(使用 inotify 監視器)沒有表現出這種行為: chmod 觸發一個
AttributeModified
事件,沒有別的。這對我來說非常令人驚訝,並解釋了您一直覺察到的行為(並且我已經能夠重現)。這顯然是記錄在案的行為;fswatch GitHub 儲存庫對此有一個 已關閉的“無法修復”問題:
如果不同的事件在短時間內來自同一個文件,那麼多個事件可能攜帶有關同一事件的資訊。(…)
fswatch
對此無能為力。上面連結的問題頁面還提出了一些解決方法,但似乎都不是很令人滿意。也許,在您的情況下,分別在應用 chmod 和 chown 之前檢查現有權限和所有權會有所幫助。