壊れた画像を探して削除する

いちどjrubyで画像として読み込んでwidthやheightが取れていれば破損していないとみなす
delete_broken_imgs.rb

#!/usr/bin/env jruby
# -*- coding: utf-8 -*-
require 'java'
import 'java.lang.System'
import 'javax.imageio.ImageIO'
import 'java.awt.image.BufferedImage'

if ARGV.size < 1
  puts 'jruby delete_broken_img.rb /path/to/imgs'
  exit 1
end

errors = Array.new
ARGV.each{|name|
  puts name
  begin
    img = ImageIO.read(java.io.File.new name)
    puts " #{img.width}x#{img.height}"
  rescue => e
    STDERR.puts e
    puts " => broken image [#{name}]"
    errors << name
  end
}

if errors.empty?
  puts 'no broken images'
  exit
end

p errors
errors.each{|name|
  puts "delete #{name}"
  begin
    File.delete(name)
  rescue => e
    STDERR.puts e
  end
}

puts "delete #{errors.size} images"


使う

jruby delete_broken_img.rb tmp/*.jpg