From: Robert Klemme Date: 2008-02-07T07:39:58+09:00 Subject: Re: pulling elements into a method... On 06.02.2008 23:16, grooveska 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 > 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