Skip to content

Instantly share code, notes, and snippets.

@georgboe
Created October 1, 2010 18:49
Show Gist options
  • Save georgboe/606656 to your computer and use it in GitHub Desktop.
Save georgboe/606656 to your computer and use it in GitHub Desktop.
Recursively traverse and unpack all .rar files
#!/usr/bin/env ruby
require 'fileutils'
module FileUtils
def self.move_to_trash(file)
dest = File.join(File.expand_path('~/.Trash/'), File.basename(file))
if File.exist?(dest)
dest = File.join(File.expand_path('~/.Trash/'), File.basename(file) + " #{rand(76938476)}")
end
mv(file, dest)
end
end
def unpack_folder(folder)
ignore_extentions = [".rb", ".nfo", ""]
files_before_extracting = Dir.glob(File.join(folder, "*"))
rar_files = files_before_extracting.select { |x| x.end_with? ".rar" }
if rar_files.length > 0
rar_file = rar_files.first
puts "unpacking #{File.basename(rar_file)}"
command = "cd \"#{folder}\" && unrar e \"#{File.absolute_path(rar_file)}\" &> /dev/null"
result = system(command)
unless result
abort "Unpacking failed."
end
system("growlnotify -a Terminal.app -t \"Unpacking complete\" -m \"#{File.basename(rar_file)}\"")
files_after_extracting = Dir.glob(File.join(folder, "*"))
new_files = files_after_extracting - files_before_extracting
files_to_delete = (files_after_extracting - new_files).reject { |x| ignore_extentions.include? File.extname(x) }.reject { |x| File.directory? x }
files_to_delete.each do |file|
FileUtils.move_to_trash(file)
end
end
sample_dir = File.join(folder, "Sample")
FileUtils.move_to_trash(sample_dir) if File.exist?(sample_dir)
end
def traverse_folder(folder)
Dir.new(folder).each do |file|
next if ['.', '..'].include?(file)
file = File.join(folder, file)
if (File.directory?(file))
traverse_folder(file)
end
end
process_folder(folder)
end
def process_folder(folder)
unpack_folder(folder)
end
traverse_folder(Dir.pwd)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment