2016-06-08 93 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因为您记录您实际处理的那些更稳健。