pulling elements into a method...

G

grooveska

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

Robert Klemme

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.

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 - 60*60*24*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
 
7

7stud --

grooveska said:
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.
 
7

7stud --

grooveska said:
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)
 
T

Todd Benson

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Staff online

Members online

Forum statistics

Threads
474,283
Messages
2,571,405
Members
48,098
Latest member
inno vation

Latest Threads

Top