Files

更新目錄內容時如何執行命令?

  • August 15, 2020

有一個目錄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

-qq開關完全靜默,-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網站了解更多詳情。

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