2016-06-08 94 views
1

我想每天使用linux bash腳本監視目錄中的新文件。每天檢查新文件的目錄 - linux bash腳本

每4小時左右將新文件添加到目錄中。所以我想在一天結束時處理所有文件。 通過過程我的意思是將它們轉換爲替代文件類型,然後將它們轉換到另一個文件夾轉換一次。

我已經看過inotify來監視目錄,但不能告訴你是否可以將它作爲日常事物。

使用inotify我有這個代碼示例腳本工作:

#!/bin/bash 

while read line 
do 
     echo "close_write: $line" 
done < <(inotifywait -mr -e close_write "/home/tmp/") 

時添加新的文件但這通知,這是直接的。

我正在考慮使用這種方式,並跟蹤新文件,然後在一天結束時立即處理它們。

我以前沒有這樣做,所以我希望得到一些幫助。

也許inotify以外的東西會更好。

謝謝!

回答

1

您可以每天使用cron作業:http://linux.die.net/man/1/crontab

+0

這應該很好!謝謝! – VickiT05

+0

一個問題 - 有沒有一種方法可以識別新添加的文件? – VickiT05

+0

使用find命令找到更新的文件然後... http://stackoverflow.com/questions/6964747/find-all-files-recursively-newer-than-given-time –

1

絕對應該考慮使用一個cronjob。編輯你的cronfile,並把它放在:

0 0 * * * /path/to/script.sh 

這意味着每天午夜運行你的腳本。然後在您的script.sh中,您只需要爲所有文件「將其轉換爲其他文件類型,然後將其轉換爲另一個文件夾」。

+0

非常感謝你 – VickiT05

1

要通過一天結束時收集的文件,只需要使用發現:

find $DIR -daystart -mtime -1 -type f

然後當別人指出的,建立一個cron作業來運行你的腳本。

+0

太棒了!非常感謝你 – VickiT05

1

您的cron作業(請參閱本頁上的其他答案)應該保留已處理文件的列表,然後使用comm -3 processed-list all-list獲取新文件。 man comm

它是一種更好的選擇
awk 'FNR==NR{a[$0];next}!($0 in a)' processed-list all-list

,或許比使用find因爲您記錄您實際處理的那些更穩健。