Files
更新目錄內容時如何執行命令?
有一個目錄
A
,其內容經常被其他人更改。我創建了一個個人目錄
B
,其中保存了曾經存在的所有文件A
。目前,我只是偶爾跑來獲取要
rsync
備份的文件。但是,我擔心某些文件可能會被添加到 中,然後在我有機會將它們複製到.A``B``A``A``B
防止這種情況發生的最佳方法是什麼?理想情況下,我希望每次
A
更改內容時都執行我目前的備份腳本。
如果您安裝了inotify-tools,您可以
inotifywait
在文件或目錄被寫入時觸發操作:#!/bin/sh dir1=/path/to/A/ while inotifywait -qqre modify "$dir1"; do /run/backup/to/B done
-r
是遞歸的(如果需要)並且是-e
要監視的事件,在這種情況下modify
。來自man inotifywait
:modify
已寫入監視文件或監視目錄中的文件。
嘗試
entr
命令行工具,它可以在文件更改時執行任意命令。從 2.9 版本開始,添加了一個目錄監視選項 (-d
) 以在將新文件添加到目錄時對事件做出反應。如果將新文件添加到項目中,則執行該實用程序的範例:
$ while true; do > echo src/* | entr -d your_command > done
在目錄監視模式下,每個文件的父目錄都被隱式添加到監視列表中。
這樣做的唯一含義是,如果出現新文件,它必須退出以允許外部 shell 循環重新掃描文件系統。
這是沒有目錄監視選項的版本:
$ while true; do > echo src/* src | entr your_command > done
這是一個更簡單的範例,具體取決於您的需要:
$ ls -d * | entr sh -c 'rsync -vuar A B'
查看:eradman.com/entrproject網站了解更多詳情。