2010-10-20 48 views
6

在unix系統上,我該如何監視(如「尾巴」的工作方式)文件所做更改的目錄 - 無論是新建的文件還是更改的大小等。監控更改目錄列表?

尋找命令行工具而不是需要安裝的東西。

回答

1

如果你不想安裝工具,你可以自己製作。只是一個想法。 使用find命令創建目錄的基線文件。使用循環或cron作業,find使用相同參數的目錄,並根據基線文件檢查新文件。使用工具,如diff,以獲得差異..

find /path [other options] >> baseline.txt 
while true #or use a cron job 
do 
    find /path [same options] >> listing.txt 
    diff baseline.txt listing.txt 
    # do processing here... 
    mv listing.txt baseline.txt # update the baseline. 
    sleep 60 
done 
+0

僅供我參考 - 做這樣的事情存在嗎? – siliconpi 2010-10-20 13:02:38

+0

你在說什麼「事情」?如果你正在談論用於這些事情的工具,那麼是的。像tripwire,inotify等工具... – ghostdog74 2010-10-20 13:06:56

5

大多數Unix變體對於這樣的一個API,但它不規範。在Linux上,有inotify。在命令行上,您可以使用inotifywait。用例:

inotifywait -m /path/to/dir | while read -r dir event name; do 
    case $event in 
    OPEN) echo "The file $name was created or opened (not necessarily for writing)";; 
    WRITE) echo "The file $name was written to";; 
    DELETE) echo "The file $name was deleted ";; 
    esac 
done 

inotify的事件類型往往不完全是你想要什麼通知(例如OPEN很寬),所以如果你最終使自己的文件檢查不心疼。

+0

這是正確的答案,因爲它顯示瞭如何使用API​​來監視更改。 ghostdog74的答案可能有用,但它有資源成本。如果你需要監控1000個目錄呢? – 2012-05-08 17:17:42

+0

注意:這個答案只適用於使用Linux內核2.6.13或更高版本。不知道其他Unicies。 – 2013-07-17 14:55:42

+0

請您澄清一下* *閱讀-r目錄事件名稱; *做* *? – arod 2013-10-29 23:09:49