Esta utilidad busca archivos duplicados comprobando el hash CRC32.
Citar
- Modo de empleo:
- Opciones: [-R] Habilita la búsqueda recursiva de subdirectorios.
- Ejemplos:
FINDUS -R "C:\Windows"
Código
# -*- coding: UTF-8 -*- require "zlib" exit if Object.const_defined?(:Ocra) def logo() print ' _______ __ _____ ___ ________ ____ ____ ________ /" "| |" \\ (\\" \\|" \\ |" "\\ (" _||_ " | /" ) (: ______) || | |.\\\\ \\ | (. ___ :) | ( ) : | (: \\___/ \\/ | |: | |: \\. \\\\ | |: \\ ) || (: | | . ) \\___ \\ // ___) |. | |. \\ \\. | (| (___\\ || \\\\ \\__/ // __/ \\\\ (: ( /\\ |\\ | \\ \\ | |: :) /\\\\ //\\ /" \\ :) \\__/ (__\\_|_) \\___|\\____\\) (________/ \\__/ (_______/ Find Duplicates v1.0 By Elektro H@cker ' end def help() print ' Este programa busca archivos duplicados comprobando el hash CRC32. [*] Modo de empleo: FINDUS [OPCIONES] [RUTA] [*] Opciones: [-R] Habilita la búsqueda recursiva en subdirectorios. [*] Ejemplos: FINDUS "%CD%" FINDUS -R "C:\Windows" ' Process.exit end def errorcontrol() if ARGV.empty? help elsif ARGV.length == 2 and not File.directory? (ARGV[1]) help elsif ARGV.length == 1 and not File.directory? (ARGV[0]) help end if ARGV[0] =~ /-r/i $folder = ARGV[1] Dir.chdir($folder) resursive = File.join("**", "*.*") $files = Dir.glob(resursive) elsif $folder = ARGV[0] Dir.chdir($folder) not_resursive = File.join("*.*") $files = Dir.glob(not_resursive) end end logo errorcontrol $list = "" # Listar los archivos del directorio File.open("#{ENV['TEMP']}\\dir.txt", 'w+') do |file| file.puts $files end # Comparar el crc de cada archivo listado File.read("#{ENV['TEMP']}\\dir.txt").each_line { |line| begin file = File.read(line.strip) ; nil file_crc = Zlib.crc32(file,0).to_s(16) file_size = File.size(line.strip) if $list[file_crc.to_s] print "#{$folder}\\#{line.strip.gsub('/', '\\')}\n#{$list.split(file_crc).first.split(")").last.split("\n\n").last}#{file_crc})\n\n" end $list << "#{$folder}\\#{line.strip.gsub('/', '\\')}\n(CRC32: #{file_crc}) (BYTES: #{file_size})\n\n" rescue print "Archivo inaccesible #{$folder}\\#{line}" end } __END__
PD: Tiene algunos fallos en los permisos de las carpetas especiales de windows
Saludos.