Pulling elements into a method

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
error.

Thanks.

grooveska wrote:

I’m getting the argument out of range
error.

Thanks.

Post the exact error message, and also post which line in your code that
the error message refers to.

On 06.02.2008 23:16, grooveska wrote:

year = time.year #grab the year of the current time
File.unlink(entry)
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
error.

At a shell prompt on a proper operating system you can do something like
this:

find your_dir -type f -mtime +14 -print0 | xargs -r0 rm

If you want to do it in Ruby you can do

require ‘find’

limit = Time.now - 606024*14

cleanup_dirs.each do |dir|
Find.find dir do |f|
File.unlink f if File.file? f &&
File.mtime(f) < limit
end
end

Cheers

robert

grooveska wrote:

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
error.

Thanks.

Pay attention to this code:

day = day - 14


Time.local(year,month,day,00,00,0)

On Feb 6, 2008 4:19 PM, grooveska [email protected] wrote:

year = time.year #grab the year of the current time
File.unlink(entry)
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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs