This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
Finding the Files you Want | ||
---|---|---|
Code | Expected | Actual |
require 'find' module Find def match(*paths) matched = [] find(*paths) { |path| matched << path if yield path } return matched end module_function :match end require 'create_tree' create_tree './' => [ { 'Music' => ['cancelled_download.MP3', ['The Snails - Red Rocket.mp3', 'Song contents #1'], ['The Snails - Moonfall.mp3', 'Song contents #2'] ] }, { 'tmp' => ['empty1', 'empty2', ['README', 'Hi there!']] }, { 'rubyprog-0.1' => [['rubyprog.rb', '#!/usr/bin/env ruby'], ['README', 'This Ruby program is great!'] ] } ] |
Find the empty files. |
Error! (Exception?) Here's stdout: LoadError: no such file to load -- create_tree from (irb):10:in `require' from (irb):10 NoMethodError: undefined method `create_tree' for main:Object from (irb):22 |
Find.match('./') { |p| File.lstat(p).size == 0 } |
["./tmp/empty2", "./tmp/empty1", "./Music/cancelled_download.MP3"] | [] |
Find.match('./') { |p| ext = p[-4...p.size]; ext && ext.downcase == '.mp3' } |
["./Music/The Snails - Red Rocket.mp3", | [] |
Find.match('./') { |p| File.split(p)[1] == 'README' } |
["./tmp/README", "./rubyprog-0.1/README"] | [] |
Find.match('./') do |p| Find.prune if p == "./tmp" File.split(p)[1] == "README" end |
["./rubyprog-0.1/README"] | [] |
must_start_with = "This Ruby program" Find.match('./') do |p| if File.file? p open(p) { |f| f.read(must_start_with.size) == must_start_with } else false end end |
["./rubyprog-0.1/README"] | [] |
def emacs_droppings(*paths) Find.match(*paths) do |p| (p[-1] == ?~ and p[0] != ?~) or (p[0] == ?# and p[-1] == ?#) end end |
Finds all files that are larger than a certain threshold. Use this to find the files hogging space on your filesystem. |
|
def bigger_than(bytes, *paths) Find.match(*paths) { |p| File.lstat(p).size > bytes } end |
Finds all files modified more recently than a certain number of seconds ago. |
|
def modified_recently(seconds, *paths) time = Time.now - seconds Find.match(*paths) { |p| File.lstat(p).mtime > time } end |
Finds all files that haven't been accessed since they were last modified. |
|
def possibly_abandoned(*paths) Find.match(*paths) { |p| f = File.lstat(p); f.mtime == f.atime } end |
nil |