# New file arrivals into a specific directory / folder

**URL:** <https://www.ruby-forum.com/t/new-file-arrivals-into-a-specific-directory-folder/195631>\
**Category:** Ruby\
**Created:** [September 27, 2010, 12:43pm UTC](https://www.ruby-forum.com/t/new-file-arrivals-into-a-specific-directory-folder/195631 "2010-09-27T12:43:33Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![paradise](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/8e7dd6/32.png) [@paradise](https://www.ruby-forum.com/u/paradise)\
**Post date:** [September 27, 2010, 12:43pm UTC](https://www.ruby-forum.com/t/new-file-arrivals-into-a-specific-directory-folder/195631/1 "2010-09-27T12:43:33Z")

</div>

greetings one and all,

My need is this.  
Get my program to be executed when ever something new arrives into a  
directory.

the data in the directory could be an email or it could be a file. most  
likely plain text the transport media unknown yet (transport could be  
using email or cellphone / digital RF into the PC ergo a file).

frequency of scans for new arrivals may need to seconds or to minutes so  
variability here would be great here too.

From reading months ago I wonder if notify or inotify or even cron would  
be good fit.

Does anyone here know of a gem that could do this and if so please point  
me in the direction?

Ruby currently using is 1.8.7 not sure if I’ll take what i’ve done to  
1.9.x yet.  
as I’ve got to get my 1st project bedded in (this will be another  
project taking what i’ve done a step further).

Or reason for not using ruby for this task of monitoring the directory?

after doing a limited search of the list I’ve found filewatcher and  
directorywatcher just to name 2 at least.

I know these are oldish but is there anything newer/better out there?

I will be using the program on linux (specifically Kubuntu 10.04 but  
this maybe moved to a debian dedicated server) desktop pc.

cheers,

dave.

---

<div class="post-metadata">

**Author:** ![paradise](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/8e7dd6/32.png) [@paradise](https://www.ruby-forum.com/u/paradise)\
**Post date:** [September 27, 2010, 7:15pm UTC](https://www.ruby-forum.com/t/new-file-arrivals-into-a-specific-directory-folder/195631/2 "2010-09-27T19:15:39Z")

</div>

On Sep 27, 6:43 am, Dave L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> frequency of scans for new arrivals may need to seconds or to minutes so  
> as I’ve got to get my 1st project bedded in (this will be another  
> this maybe moved to a debian dedicated server) desktop pc.
> 
> cheers,
> 
> ## dave.
> 
> Posted viahttp://www.ruby-forum.com/.

One implementation that may work is to use a currency file (a hidden  
file say .currfile). For the very first run, get all the files and at  
the end touch this file (if it does not exist). So it is something  
like this:

while (forever)  
do  
save the current timestamp  
if .currfile exists  
find all files newer than .currfile in directory  
else  
find all files  
end

touch (create/update) .currfile with the saved timestamp.

sleep for some time  
done

Depending on how precise that you want the process to be, you may have  
to modify this a bit.

This kind of use of currency file was done by news utility in unix to  
show only the news items (on command line) that the user has not  
already seen.

---

<div class="post-metadata">

**Author:** ![paradise](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/8e7dd6/32.png) [@paradise](https://www.ruby-forum.com/u/paradise)\
**Post date:** [September 27, 2010, 7:43pm UTC](https://www.ruby-forum.com/t/new-file-arrivals-into-a-specific-directory-folder/195631/3 "2010-09-27T19:43:10Z")

</div>

Morning Dave,

On Mon, Sep 27, 2010 at 3:43 AM, Dave L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> greetings one and all,
> 
> My need is this.  
> Get my program to be executed when ever something new arrives into a  
> directory.

Very straight forward here. Using the rb-notify library (  
[GitHub - guard/rb-inotify: A thorough inotify wrapper for Ruby using FFI.](http://github.com/nex3/rb-inotify))

i = INotify::Notifier.new

i.watch(‘/directory’, :close\_write) do |ev|  
puts “#{ev.name.to\_s} just added”  
end

i.run

You could shell out or embed this in your app or whatever else you  
wanted  
but this will fire the block for every new file placed in the directory.

John

---

<div class="post-metadata">

**Author:** ![paradise](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/8e7dd6/32.png) [@paradise](https://www.ruby-forum.com/u/paradise)\
**Post date:** [September 29, 2010, 9:20am UTC](https://www.ruby-forum.com/t/new-file-arrivals-into-a-specific-directory-folder/195631/4 "2010-09-29T09:20:22Z")

</div>

John W Higgins wrote:

> Morning Dave,
> 
> On Mon, Sep 27, 2010 at 3:43 AM, Dave L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > greetings one and all,
> > 
> > My need is this.  
> > Get my program to be executed when ever something new arrives into a  
> > directory.
> 
> Very straight forward here. Using the rb-notify library (  
> [GitHub - guard/rb-inotify: A thorough inotify wrapper for Ruby using FFI.](http://github.com/nex3/rb-inotify))
> 
> i = INotify::Notifier.new
> 
> i.watch(‘/directory’, :close\_write) do |ev|  
> puts “#{ev.name.to\_s} just added”  
> end
> 
> i.run
> 
> You could shell out or embed this in your app or whatever else you  
> wanted  
> but this will fire the block for every new file placed in the directory.
> 
> John

many thanks for the heads up think this was what I had read or was it in  
a repository and called lib-inotify ruby??

what ever this was what I was looking for.

by the way would cron be a good 2nd?

i.e every X seconds / minutes / hours it spawns/executes my script to to  
check for new files / emails and then proceed to process them?

dave.

cheers,
