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.
| Deleting Files that Match a Regular Expression (written by Matthew Palmer) | ||
|---|---|---|
| Code | Expected | Actual |
def delete_matching_regexp(dir, regex)
Dir.entries(dir).each do |name|
path = File.join(dir, name)
if name =~ regex
ftype = File.directory?(path) ? Dir : File
begin
ftype.delete(path)
rescue SystemCallError => e
$stderr.puts e.message
end
end
end
end
require 'fileutils'
tmp_dir = 'tmp_buncha_files'
files = ['A', 'A.txt', 'A.html', 'p.html', 'A.html.bak']
directories = ['text.dir', 'Directory.for.html']
Dir.mkdir(tmp_dir) unless File.directory? tmp_dir
files.each { |f| FileUtils.touch(File.join(tmp_dir,f)) }
directories.each { |d| Dir.mkdir(File.join(tmp_dir, d)) }
Dir.entries(tmp_dir) |
[".", "..", "A", "A.txt", "A.html", "p.html", "A.html.bak", | [".", "..", "A", "A.txt", "A.html", "p.html", "A.html.bak", "text.dir", "Directory.for.html"] |
delete_matching_regexp(tmp_dir, /^[A-Z].*\.[^.]{4,}$/)
Dir.entries(tmp_dir) |
[".", "..", "A", "A.txt", "p.html", "A.html.bak", "text.dir"] | [".", "..", "A", "A.txt", "p.html", "A.html.bak", "text.dir"] |
def move_matching_regexp(src, dest, regex)
Dir.entries(dir).each do |name|
File.rename(File.join(src, name), File.join(dest, name)) if name =~ regex
end
end
def append_matching_regexp(dir, suffix, regex)
Dir.entries(dir).each do |name|
if name =~ regex
File.rename(File.join(dir, name), File.join(dir, name+suffix))
end
end
end
def each_matching_regexp(dir, regex)
Dir.entries(dir).each { |name| yield name if name =~ regex }
end
def append_matching_regexp(dir, suffix, regex)
each_matching_regexp(dir, regex) do |name|
File.rename(File.join(dir, name), File.join(dir, name+suffix))
end
end
def delete_matching_regexp_recursively(dir, regex)
Find.find(dir) do |path|
dir, name = File.split(path)
if name =~ regex
ftype = File.directory?(path) ? Dir : File
begin
ftype.delete(path)
rescue SystemCallError => e
$stderr.puts e.message
end
end
end
end |
nil | |