Todd Benson
2/6/2008 10:51:00 PM
On Feb 6, 2008 4:19 PM, grooveska <ryangs@mac.com> wrote:
> I am new to ruby and I'm having trouble with a script I'm working on.
> It probably is something simple that I am missing. I am working on a
> script to delete some files from several directories.
>
> Here is the part of the script I'm having problems with:
>
> time = Time.now #set time object to the current time
> month = time.month #grab the number of the month from the
> current
> day = time.day #grab the day of the current time
> year = time.year #grab the year of the current time
>
> day = day - 14
> def delete_old_files(dir, time)
> Dir.chdir(dir) do
> Dir.foreach(".") do |entry|
> next if File.stat(entry).directory? #prevent from deleting
> directories
>
> #Use the modification time
> if File.mtime(entry) < time
> File.unlink(entry)
> end
> end
> end
> end
>
> cleanup_dirs = ["E:/oracle/MB4/oraarch/", "E:/oracle/MB3/oraarch/",
> "E:/oracle/MB5/oraarch", "F:/oracle/MBA/oraarch/", "F:/oracle/MB2/
> oraarch/", "F:/oracle/MB3/oraarch/", "F:/oracle/MB/oraarch/"]
> cleanup_dirs.each do |cleanup_directory|
>
> delete_old_files(cleanup_directory,Time.local(year,month,day,00,00,0))
>
> end
>
>
> I should probably use a block or proc or something like that. Any
> advice is greatly appreciated. I'm getting the argument out of range
Well, for one thing, your day will be negative if it is less than 14.
I would think you'd be better off using Date instead of Time. To
illustrate (for today)...
irb:(main):001:0> require 'date'
=> true
irb:(main):002:0> d = Date.today
=> #<Date: 4908977/2,0,2299161>
irb:(main):003:0> d.day - 14
=> -8
irb:(main):004:0> d.to_s
=> "2008-02-06"
irb:(main):005:0> (d - 14).to_s
=> "2008-01-23"
irb:(main):006:0> Time.local(2008, 2, -8)
Argument Error: argument out of range...
hth,
Todd