From: Robert Klemme Date: 2011-11-22T19:39:40+09:00 Subject: Re: Removing directories older than x days old On Tue, Nov 22, 2011 at 11:27 AM, Multicom D. wrote: > Hi, I am trying to write a script that will remove directories that are > older than 5 days old.  I can't seem to get the datetime for the > directory to be usable for comparison. > > require 'fileutils' > > class CleanupDirs >  def cleanup() >    Dir.foreach("/mydir/") do |entry| >      puts entry >      etime = File.stat(entry) >      vAgeInDays = ageInDays( etime.ctime ) >      if vAgeInDays > 5 >        Dir.delete(entry) > >      end >    end >  end > >  def ageInDays(days) >    ydate = Time.new >    ydate = ydate - ( 24 * 60 * 60 * days) You do not want to substract the number of seconds from a timestamp to get the age. For the age of something you need to calculate now - timestamp. >    return ydate >  end > end > > CleanupDirs.new.cleanup > > I keep getting the error  Time can't be coerced into Fixnum (TypeError). > > Can someone point out what I am doing wrong? Better do def age_in_days(time_stamp) (Time.now - time_stamp) / (24 * 60 * 60) end The whole thing might be a tad more efficient if you do def age_in_days(time_stamp, now = Time.now) (now - time_stamp) / (24 * 60 * 60) end now = Time.now ... if age_in_days(ts, now) > 5 ... end Also that way you have a single reference point which might make some things easier. Few more remarks: you do not need a class for this as the only method (cleanup) does not have any parameters and does not work with instance state. Note also that you might rather want to use #mtime instead of #ctime. You should also treat entries different which are directories. Maybe you rather want to use Find.find or a glob pattern like Dir['**/*']. Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/