清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
require 'find'
require 'digest/md5'
uniqueFileTable = Hash.new
sameFileTable = Hash.new
#puts ARGV[0]
directory = ARGV[0]#.encode("UTF-8")
def have_same?(table, file)
size = File.size(file)
if table.has_value?(size) then
buf = Digest::MD5.hexdigest open(table.key(size),"rb"){|f| f.read}
bufAnother = Digest::MD5.hexdigest open(file,"rb"){|f| f.read}
if buf == bufAnother then
return table.key(size)
end
end
return nil
end
Find.find(directory) do |file|
if File.file?(file) then
originFile = have_same?(uniqueFileTable, file)
if originFile != nil then
sameFileTable[file] = originFile
else
uniqueFileTable[file] = File.size(file)
end
end
end
=begin
puts "\nuniqueFileTable:"
uniqueFileTable.each do |fileName, size|
puts "%s : %d" % [fileName, size]
end
=end
if sameFileTable.length > 0
puts "\nsameFileTable:"
sameFileTable.each do |fileName, fileName2|
puts "%s : %s" % [fileName, fileName2]
end
puts "Remove All #{sameFileTable.length} reduplicate Files?(y = yes to all, c = confirm, n = do nothing)"
userInput = STDIN.gets.chomp
if userInput == "y"
sameFileTable.each_key do |fileName|
File.delete(fileName)
end
elsif userInput == "c"
puts "For each confirm : y = yes, a = all, n = no."
userInputInner = ""
sameFileTable.each_key do |fileName|
if userInputInner == "a"
File.delete(fileName)
next
end
puts "Delete? #{fileName}"
while true
userInputInner = STDIN.gets.chomp
if userInputInner == "y" || userInputInner == "a"
File.delete(fileName)
break
elsif userInputInner == "n"
break
end
end
end
end
else
puts "No Same File."
end