2010年05月08日

重複ファイル検知

Linuxで重複ファイルの検知できねーかなあと思ってやり方だけ考えたまま放置していたのを作った。たまにこういうのをやるとLinuxというかUNIXすげえ便利だなあと思う。Cygwin入れろという話なのかも知れない。
手元のローカルフォルダでちょっと試しただけなので、動かない場合がありそう。

find ./ -type f -exec openssl sha1 {} \; | sed -e 's/SHA1(\(.*\))= \(.*\)/\2 , \1/g' | sort | awk -F , 'BEGIN{a=0} {if ($1 == prev){if(a == 0){print "\n----SHA =",$1,"----\n",prevline;a=1} print $2}else{a=0}; prev = $1;prevline = $2}'

1. 各ファイルのハッシュ値計算
2. 「ハッシュ値 ファイルパス」となるように整形
3. ソート
4. 同じハッシュ値の行を抽出

という感じ。もうちょい簡単にかけないかなあ。
あとでかいファイルのハッシュの計算時間かかるから、ハッシュ計算した時点でファイルに出力した方が安心だな。