Forum: Ruby Newbie: Recursive deletion of files and dir

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
FredrikC (Guest)
on 2006-01-22 23:34
Hi!
I'm designing (newbie level) a script to clean up empty directories and
old files recursivly. Something is wrong..works fine when not actually
deleting anything, but when I start removing files and directories it
ends prematurly.. any heklp available..?

def thisDir(dirname,f)
	Dir.chdir(dirname)
	currDir=Dir.getwd
	nf=0
	nd=0
	fs=0.0

	if Dir.entries(currDir).size>2 then
		Dir.foreach(currDir) {|x|
		if FileTest.file?(x) && (Time.now-File.mtime(x))/(60*60*24)>15 then
			f.puts("deleting file"+x)
			nf=nf+1
			fs=fs+File.stat(x).size
		end
		if FileTest.directory?(x) && x!="." && x!=".." then
			lV=thisDir(x,f)
			nf=nf+lV[0]
			nd=nd+lV[1]
			fs=fs+lV[2]
		end
		}
	Dir.chdir("..")
	end
	if Dir.entries(currDir).size<=2 then
		Dir.chdir("..")
		f.puts("deleteting this directory:"+currDir)
		nd=nd+1
		#Dir.delete(currDir)
	end

	#Dir.chdir("..")
return [nf,nd,fs]
end
outFileName="cleaned-"+Date.today.to_s+".log"
f=File.new(outFileName,"w")
values=thisDir("./",f)
puts "Deleted "+values[0].to_s+" files"
puts "Deleted "+values[1].to_s+" directories"
puts "Total size deleted:"+(values[2]/(1024)).to_s+" kB"

Any advice is appriciated
Eero S. (Guest)
on 2006-01-22 23:52
FredrikC wrote:
> Hi!
> I'm designing (newbie level) a script to clean up empty directories and
> old files recursivly. Something is wrong..works fine when not actually
> deleting anything, but when I start removing files and directories it
> ends prematurly.. any heklp available..?
>
> def thisDir(dirname,f)
> 	Dir.chdir(dirname)
> 	currDir=Dir.getwd
> 	nf=0
> 	nd=0
> 	fs=0.0
>
> 	if Dir.entries(currDir).size>2 then
> 		Dir.foreach(currDir) {|x|
> 		if FileTest.file?(x) && (Time.now-File.mtime(x))/(60*60*24)>15 then
> 			f.puts("deleting file"+x)
> 			nf=nf+1
> 			fs=fs+File.stat(x).size
> 		end
> 		if FileTest.directory?(x) && x!="." && x!=".." then
> 			lV=thisDir(x,f)
> 			nf=nf+lV[0]
> 			nd=nd+lV[1]
> 			fs=fs+lV[2]
> 		end
> 		}
> 	Dir.chdir("..")
> 	end
> 	if Dir.entries(currDir).size<=2 then
> 		Dir.chdir("..")
> 		f.puts("deleteting this directory:"+currDir)
> 		nd=nd+1
> 		#Dir.delete(currDir)
> 	end
>
> 	#Dir.chdir("..")
> return [nf,nd,fs]
> end
> outFileName="cleaned-"+Date.today.to_s+".log"
> f=File.new(outFileName,"w")
> values=thisDir("./",f)
> puts "Deleted "+values[0].to_s+" files"
> puts "Deleted "+values[1].to_s+" directories"
> puts "Total size deleted:"+(values[2]/(1024)).to_s+" kB"
>
> Any advice is appriciated

I did not read this code yet but take a look at ri FileUtils,
it has useful methods including two that might be handy here:

  FileUtils.rm_rf
  FileUtils.mkdir_p


E
This topic is locked and can not be replied to.