重複している画像ファイルを削除(rubyで)

重複しているファイルを削除します。

delete_duplicate_file.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
require 'digest/md5'

file_hash = ARGV.inject(Hash.new) do |hash, file|
              hash[file] = Digest::MD5.hexdigest(File.open(file, 'rb').read)
              hash
            end

duplicated_md5 = file_hash.values.sort.inject(Hash.new) do |file_count, md5|
                   file_count[md5] = file_hash.values.count(md5)
                   file_count
                 end.select do |md5, count|
                   count > 1
                 end.keys

duplicated_md5.map do |file_md5|
  # 削除ではなく重複したファイルを他のディレクトリに退避したい場合などはここを変えてください。
  File.unlink file_hash.invert[file_md5]
end

使い方

1
ruby delete_duplicate_file.rb ./*

引数でブロブ渡したら勝手に展開されて渡されてきたので、そのままプログラム内で参照しちゃったけどひょっとしたらzshだけかも(?)
もっとうまく書けるような気もするけど体力不足の今日の私の脳みそではこれが限界。

Comments