DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   Shell Scripting (http://www.daniweb.com/forums/forum113.html)
-   -   FInding dates on files (http://www.daniweb.com/forums/thread66976.html)

sgriffiths Jan 11th, 2007 5:39 am
FInding dates on files
 
Hello

I have some files with the date included in the filename

the format is

limited_file_11012007.dat
so this is the 11th January 2007

I have numerous files eg

limited_file_23012006.dat
limited_file_02122005.dat
limited_file_23012006.dat
limited_file_31032006.dat

I want to pick the file that is the closet day after today, ie todays date would be 11012007

How can i do this, i have tried all sorts of things, but it looks like a big bag of spanners.?

Any help appreciated

pty Jan 12th, 2007 7:36 am
Re: FInding dates on files
 
This should do the trick. Commented the last bit just in case you're not familiar with ruby.


#!/usr/bin/ruby

require 'find'

directory = "/home/peter/Ruby/test_data"
files = Array.new

#first get a list of the files

Find.find(directory) do |filename|
        filename.each do |f|
                files << f if /\.dat/ =~ f
        end
end

#to hold the difference, closest file name and its difference in time from today
diff, closest, closest_diff = nil

files.each do |f|
        #get the part of the string following the last / 
        filename = f.split("/")[-1]
        #create a time using the info in the filename
        x = Time.utc(filename.slice(17,4), filename.slice(15,2), filename.slice(13,2))
        #if the time is greater than now
        if x > Time.now
                #calculate the difference
                diff = x - Time.now
                if closest.nil?
                #if closest is empty (ie we are checking the first file)
                        closest = f
                        closest_diff = diff
                else
                #otherwise if the difference is smaller than the closest diff update our variables
                        closest = f if diff < closest_diff
                        closest_diff = diff
                end
        end

end

puts closest


All times are GMT -4. The time now is 9:39 pm.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC