壊れた画像を探して削除する
いちど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