2013-06-13 29 views
5

我的目標是,只要任何新的文件被添加到一個特定的目錄或特定目錄的子目錄下的任何自動運行bash腳本。如何自動調用bash腳本時,目錄內容恰克

詳細方案:

我創造了從教師到學生,反之亦然文件提交的自動化過程。發件人會上傳文件,將存儲在格式LAMP服務器,EX的上傳目錄中。 「name_course-name_filename.pdf」。我想要一些方法,以便在Uploads文件夾內存儲任何文件時,腳本將被調用並將該文件發送到接收者列表。 從數據庫中,我可以找到該特定課程和學生的接收者列表。

我的唯一關心的是,如何自動調用腳本,並使其個人檔案工作時的目錄更改的內容。克倫會間隔地做,但不是真正的時間工作。

+3

你見過[inotify的(http://stackoverflow.com/questions/4062806/inotify-how-to-use-it-linux )? –

+0

雅我已經看到它,但是,我從來沒有使用過這個,也找不到任何文章描述正確使用inotify調用abash腳本 – pali

+0

您可以使用[inotifywait](http://linux.die.net/man/ 1/inotifywait)例如。 –

回答

5

Linux提供用於此目的被稱爲inotify一個很好的機制。 inotify大多可用作C API。但是也有開發的shell工具。您應該使用inotifywaitinotifytools(在Debian PKG名)這一點。又來了一個簡單的例子:

#!/bin/bash 

directory="/tmp" # or whatever you are interested in 

inotifywait -m -e create "$directory" | 
while read folder eventlist eventfile 
do 
    echo "the following events happened in folder $folder:" 
    echo "$eventlist $eventfile" 
done 

更新:

如果問題消失複雜,比如你必須監控遞歸,動態目錄結構,你應該看看incron這就像一個cron在某些事件上執行腳本的守護進程。但事件是文件系統事件而不是定時器事件。

+0

感謝您的回覆,讓我檢查您的解決方案... – pali

+0

我試過你的解決方案。我在終端上看到「正在建立手錶。 手錶」,程序沒有終止。我對新手很陌生。所以請澄清.. – pali

+1

在您將看到的文件夾中進行一些更改。 :)該程序將永遠不會終止在它的當前版本中。它將永遠等待更改。請注意,我會AFK一段時間。稍後再回來。 – hek2mgl

2

還有另一種選擇,以「inotifywait」:

-d --daemon 同--monitor,除了在後臺記錄的事件必須由--outfile指定文件 運行。意味着--syslog。

爲了完整性:

-m --monitor 代替接收單個事件後退出的,無限期地執行。 默認行爲是在第一個事件發生後退出。

在'while'語句的do-done模塊中,您可以分析每個事件報告中的有趣細節,然後使用'case-esac'根據您關心的每個事件採取行動。

對於你打算依賴於你的操作的東西,你也可以考慮用某種配置文件替換硬編碼的'$ directory'。這樣的文件可能包括路徑和文件名,該路徑和文件的有趣事件以及發生這些事件時運行的腳本。 腳本再取事件的列表作爲參數,然後「案例ESAC」。

只是一個人的ramblins, ~~~ 8D; -Dan