Skip to content

Instantly share code, notes, and snippets.

@deathwishdave
Last active August 29, 2015 14:23
Show Gist options
  • Save deathwishdave/17fbc7aceac1ad0667f3 to your computer and use it in GitHub Desktop.
Save deathwishdave/17fbc7aceac1ad0667f3 to your computer and use it in GitHub Desktop.
ruby find_same_name_different_size.rb
find_same_name_different_size.rb:18:in `==': undefined method `key' for #<SharedFile:0x007fd54b091078> (NoMethodError)
from find_same_name_different_size.rb:23:in `eql?'
from find_same_name_different_size.rb:39:in `each'
from find_same_name_different_size.rb:39:in `group_by'
from find_same_name_different_size.rb:39:in `<main>'
require 'find'
require 'pathname'
require 'pp'
require 'digest/md5'
class SharedFile
attr_reader :file_name
attr_reader :file_size
def initialize(path, file_size)
#@path = path
@key = Digest::MD5.hexdigest(IO.read(path)).to_sym
@file_name = Pathname.new(path).basename.to_s
@file_size = file_size
end
def ==(other)
self.file_name == other.file_name && self.key != other.key
# self.file_name == other.file_name && self.file_size != other.file_size
end
def eql?(other)
self == other
end
def hash
[file_name].hash
end
end
files = []
Dir.glob("**/*", File::FNM_DOTMATCH).each do |filename|
next if File.directory?(filename)
files << SharedFile.new(filename,File.size(filename))
end
results = files.group_by{|i| i}.map{|k,v| [k, v.count] }
results.each do |result|
puts "#{result[0]} , #{result[1]}"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment