エロ画像掲示板をバルクで落とすようにしたら、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