module FindDuplicates

Public Instance Methods

find_duplicates(options, paths) click to toggle source
# File lib/find-duplicates.rb, line 57
def find_duplicates(options, paths)
  groups = Groups.new
  files = paths.map { |path| Dir.glob(path + '/**/*') }.flatten

  bar = options[:bar].call files.size

  files.each do |file|
    bar.increment
    next if File.directory?(file)
    groups.add file
  end

  groups.duplicates.each do |k,group|
    death_queue = options[:remove_policy].choose_to_die(group)
    survivor = [death_queue.first]
    death_queue = death_queue.slice(1..-1)
    if options[:dry]
      puts (survivor + death_queue.map { |s| "   " + s }).join("\n")
    else
      death_queue.each { |file| File.delete file }
    end
  end    
end