エロ画像掲示板をバルクで落とすようにしたら、1日に3000枚以上落ちて来た。ポチポチながめながら処理するのも、忙しい時には馬鹿らしいし(嫌じゃないがモチベーション低い)、重複画像を何度も見るのも嫌(しかもキモい画像が多い)なので、画像のデータベースを作って、重複しているものをまず削除するスクリプトを作った。
こんなことに手間かけるのもしょうがないんで、適当に作ったもの。稚拙な部分はつっこまないように。
原理は、画像のMD5とサイズのデータベースを作り、その中にあるものは重複として削除、ないものはデータベースに追加。
#! /usr/bin/ruby require 'digest/md5' DB="/home/ogochan/jpeg/OTONA/md5" db = Hash.new begin dbf = File.open(DB,"r") if dbf dbf.each_line { | line | l = line.chop db[l] = l } dbf.close end rescue Errno::ENOENT ; end dbf = File.open(DB,"a+") Dir.glob("*.jpg") { |file| begin f = File.read(file) match = sprintf("%s:%08d",Digest::MD5.hexdigest(f),f.length) if db[match] == match printf("duplicate [%s]\n",file) File.delete(file) else db[match] = match dbf.printf("%s\n",match) end rescue Errno::ENOENT printf("no entity %s\n",file) File.delete(file) end } dbf.close