ファイルの重複検出ツ ..
[2ch|▼Menu]
39:デフォルトの名無しさん
07/10/20 15:43:36
ほとんどのやつはいい加減か動作が鈍い ファイルサイズしか調べなかったりする

40:デフォルトの名無しさん
07/10/20 16:03:56
>>33
レスありがとう。Image Hash Search みたいなものを、作るのかなと思ってたんだけど。
そうではなくローカル環境で動作する重複ファイルの検知ソフトを作るということだよね?

あと>>1で書いている重複という言葉は「バイナリレベルでの完全一致」ということでいいの?
たとえば画像とかの場合はヘッダーだけ違って中身は同じというファイルも多々あるのだけど。

私の質問がわるくてごめん。>>32の3はソフト使用者がどういう用途で、
パソコンを使用しているのかを考慮して、重複検知ソフトを作っているのかという話だったりします。
変な例で悪いけど、P2P使用者とそうでない人ではHDD内にある主なファイル種類・サイズは違います。
よってソフトもそれを考慮して最適化する必要があります。

41:デフォルトの名無しさん
07/10/20 16:08:26
『ほとんど』
って言葉できるだけつかわずに説明おねがい

42:デフォルトの名無しさん
07/10/20 16:28:55
>>40
バイナリの完全一致ですよ ファイルの種類での分類は考慮しない方向でいいと思います 
というのも異なる種類なら先頭の方で不一致するからです

>>41
ほとんど = UNDUPや上に上げたソフト以外


43:デフォルトの名無しさん
07/10/20 16:30:54
>>39
具体的に

44:デフォルトの名無しさん
07/10/20 16:32:04
gdgd

45:デフォルトの名無しさん
07/10/20 16:34:46
いい加減なツールは >>36にある

46:デフォルトの名無しさん
07/10/20 16:36:55
調べた時の条件は?

47:デフォルトの名無しさん
07/10/20 19:26:29
>>1しか読んでないが、ファイルサイズとMD5を保存しておいて比較するだけでいいんじゃね?


48:デフォルトの名無しさん
07/10/20 19:29:41
>>47
3GのMD5を計算するのにどれくらい時間がかかるんだろか? なるべく高速、低メモリが重要

49:デフォルトの名無しさん
07/10/20 19:31:33
目的とか目標って何なの?
既に高速なツールはあるけどもっと高速なのを作りたいの?

50:デフォルトの名無しさん
07/10/20 19:31:57
以前PerlとMySQLで、エロ画像の重複チェックしてたなぁ。
飽きて放置したまんまだけど。

51:デフォルトの名無しさん
07/10/20 19:36:41
既に高速なツールあるとはどれですか?

52:デフォルトの名無しさん
07/10/20 19:39:14
>>48
こういうのって重複したファイルを削除したいってのが目的だから、
サイズの小さいファイル(数百KBの画像とか)をターゲットにしているんじゃないの?

そこらへんが>>1に書いてないからよーわからん。

53:デフォルトの名無しさん
07/10/20 19:43:15
>>52
サイズ小さくても、ディスク一杯に詰まっていたら、500G程度読み込んでMD5を計算することになるよ
なるべくディスクの読み込みを減らして比較できた方が良い

54:デフォルトの名無しさん
07/10/20 19:44:33
1kb〜数gbのどんなサイズでも最高速に動くアルゴリズムなんて
30秒で思いつかなきゃ素質ないね。

55:NOT 1
07/10/20 19:58:11
>>43
いい加減なソフトが多いのは事実だと思うよ。
・なにをもってファイル重複としているのか、マニュアルなどに書いていない。
・NTFSのリパースポイントをソフト側で考慮していない。
すぐにあげれる問題としてはこんなとこ。

56:デフォルトの名無しさん
07/10/20 22:09:44
ルートディレクトリ(c:\)を入力したら、ファイル名とサイズと先頭32Kを読み込む
ファイルは読み込んだ順に連番をつける
ファイル名とその配置、ディレクトリ名はディスクに書き出し、ディレクトリ名とファイル番号とサイズとCRCはメモリに保持する 
ディレクトリがあれば最後に進める いくつまで進めたかを記録しておく
調べるディレクトリがなければ上へ戻る

57:デフォルトの名無しさん
07/10/20 22:11:49
もうgdgdって感じだな

58:デフォルトの名無しさん
07/10/20 22:17:14
所詮割れ厨だしな

59:デフォルトの名無しさん
07/10/20 22:33:11
>>56
最初からファイルの先頭読んでく必要ないでしょ。
同一サイズのファイルが出てきた時に初めてやればいい事だし。
つーかアルゴリズムもっと勉強しなさいよ。
辛いんだよこのスレ><

60:デフォルトの名無しさん
07/10/20 22:38:45
>>59
>>27をよんで下さい 
ディスクのシークにかかる時間を考慮すると、その位置にある時にまとめて同ディレクトリのファイル内容を
取得してしまった方が速いようです 

ここです

ソートを行って検索すべきファイルを減らした後で、今まではファイルサイズの順番に従って検索していたのを、
ディレクトリの並び順にCRCを計算していってメモリに記録し、後でファイルサイズ順にCRCを比較していく事にした。
テスト環境では従来の完全比較に比べ半分以下の時間ですみ、簡易検索の後に残った重複している可能性のある
ファイルを完全検索しても充分にお釣りがくる結果となった。
実際にはMOの様な極端にシークが遅いのでランダムアクセスが大きな負担にならない様なメディアや、
ほとんどが重複していて簡易検索では候補を絞れないためその後の完全検索で時間がかかり過ぎる場合など、
この新方式では高速化されないケースもある

61:デフォルトの名無しさん
07/10/20 22:49:23
なるほど。
エントリ読みに行ったついでにクラスタサイズ程度読むのは有効かもな。




62:デフォルトの名無しさん
07/10/20 23:46:13
基本はwindows APIを直接使う方がいいだろうな 速度的に いま>>56を作っている

63:デフォルトの名無しさん
07/10/21 00:01:22
普通に作ると一度実行するとファイルの中身がキャッシュされるので、メモリに収まるような少量のデータでテストすると1回目と2回目以降ではDISKアクセスに関してはまったく異なる挙動になります。
そこも考えてプログラムもテスト用データも作る必要がありますよ。

64:デフォルトの名無しさん
07/10/21 00:45:51
とりあえず簡単の為にCreateFileで一度アクセス出来なかった物は存在しないものとしよう 
しばらくしたらアクセス出来る物もあるとは思うが・・・
CRCの計算、ファイルの読み込み、ファイル情報の書き出しを並列化できるとおもう
情報の書き出しはある程度サイズが貯まったらにして、CRCの計算はほとんどかからないだろうから
実質的には読み込み時間だけですむと思う

65:デフォルトの名無しさん
07/10/21 00:52:56
あともっとも時間がかかるのは、サイズのでかいファイルが一致してしまう場合なんだよな
1Gのファイルが一致すれば、まともにやると2Gぶん最後まで比較しなければならなくなる
最大、比較サイズを決定してしまうという方法はある たとえば全体の30% OR 100M 一致すればあとは検査しないとか
あとは、1MずつにCRC計算しておいてデータベースに入れておけば半分ですむ

>>63
テストデータは作るの難しいと思うので直接CやDドライブを実験台にしようと思います

66:デフォルトの名無しさん
07/10/21 00:54:36
わざわざBBSに独り言を書き込まずにはコーディングできないのかね

67:デフォルトの名無しさん
07/10/21 02:31:25
1Kバイトのファイルが10万個とかある比較がと大変だな 同サイズのファイルはせいぜい1万個くらいな気はする
小さいファイルを沢山生成してテストするか こうなると中身を読んだ方が断然いい

68:デフォルトの名無しさん
07/10/21 03:35:17
頭大丈夫か


69:デフォルトの名無しさん
07/10/21 12:52:05
unixのコマンドの組み合わせでできたような
URLリンク(en.wikipedia.org)
winで動くのもあるね

70:デフォルトの名無しさん
07/10/21 16:28:37
URLリンク(fx10.web.fc2.com)

テストデータを生成します 5分ほどかかるかと思います

現在最速ソフト
URLリンク(www.vector.co.jp)

第二位
URLリンク(www.vector.co.jp)

71:デフォルトの名無しさん
07/10/22 14:17:25
ハードディスクの内蔵キャッシュは書き込み、読み込みなどを高速化するように並び替えするの?
それとも書き込む順番どおりなの?

72:デフォルトの名無しさん
07/10/22 14:29:26
CRC32の計算方法とテーブルってわかる人いますか?

73:デフォルトの名無しさん
07/10/22 14:40:48
URLリンク(kone.vis.ne.jp)

ここらへんにかいてあるが不明

74:デフォルトの名無しさん
07/10/22 14:52:13
はやいコードをコピペすればいいか

75:デフォルトの名無しさん
07/10/23 02:26:19
途中まで書いたが眠いので途中までしか無い

m ディレクトリの階層の深さ 
n 見つかったファイル総数
M 最大階層数
N 最大ファイル総数

dirname(i) 各階層のディレトリ名
dirban(i) 何番目に上のディレクトリが見つかるか
file(k) 現在調べているディレクトリでのファイル情報( 名前、サイズなと゛)

filesyori () {
path = dirname(0) +・・・+dirname(m)を開く
k=0;
if ( file(k)がファイル)

76:デフォルトの名無しさん
08/01/14 22:01:09
さて、進んでいるかい?

77:デフォルトの名無しさん
08/01/18 22:01:30
ファイル検索のDLLは作るから、GUI部分を作ってくれ。

78:デフォルトの名無しさん
08/01/18 22:09:30
まかせろ

79:デフォルトの名無しさん
08/04/19 04:05:56
誰もいなくなった?
UnDup にデータベース機能がついた様なソフトが
理想形となってるみたいですね。デスカ?

80:デフォルトの名無しさん
08/04/19 17:26:50
俺が使ってるのは多分ファイルサイズくらいしか見てないと思うが、そんな死ぬほど遅いわけじゃないけどな
同サイズのファイルが大量にあると若干遅くなるけど

81:デフォルトの名無しさん
08/04/19 17:36:38
>>79
それ考えたけど、データベース作成後に
ファイルが更新されているかどうかを調べるのが困難。
HDDだと書き換えられるから、全体を再チェックしなくてはいけなくなる。
それにデータベース作成時間程度かかる気がする。


82:81
08/04/19 17:40:24
データベースをチェックしないままだと重複ではないものを、重複と間違えることが出てくるけどこれは大したことでは無い。
しかし、重複であるものを、重複とみなさないケースが出てきてこれを見つけるのが困難になる。
結局、全部検索することになりそう。 

83:デフォルトの名無しさん
08/04/19 17:46:22
てか、そもそも何故DBを使うの?
重複検出を一回やるだけなら全部オンメモリで処理しても足りると思うんだけど。

後で別の重複検出をやるときにDBに入れたデータを再利用するってことなのかな?
そうそう再利用できるケースがあるとも思えないけど…そんな同じファイルを何回もHDD上に生成したりするものだろうか?

ファイルのハッシュ値と詳細を記録するとかだったらまだわかるんだが。

84:デフォルトの名無しさん
08/04/19 17:47:41
DVDとCDは書き換え不能とし、それだけデータベース化するなら簡単だけどね。

85:デフォルトの名無しさん
08/04/19 17:50:14
>>83
おもな利用方法はCD、DVDとの比較と思います。データベース導入ならHDDもしないと不自然だなと思うわけです。

86:デフォルトの名無しさん
08/05/03 08:42:33
UNDUPを超えるソフト作ってシェアウェアにすると幾らくらい売れますか?
500円として100個は売れますか?

87:デフォルトの名無しさん
08/05/03 08:48:34
UNDUPで十分なので売れません

88:デフォルトの名無しさん
08/05/03 09:01:50
UNICODEや長いファイル名に対応していなくて、落ちやすいバグがありますよ
あとデータベース機能機能もつけて、UNDUPの速度を半分以下にしたら幾らくらいですか?

89:デフォルトの名無しさん
08/05/03 09:07:28
シェアウェアにするなら最低でも1000円にしておけ。
500円でも1000円でも売り上げ本数は変わらんだろう。売れるかどうかは別問題だが。

90:デフォルトの名無しさん
08/05/03 09:24:44
速度を半分以下にするのか。遅いな。

91:デフォルトの名無しさん
08/05/03 09:30:02
シェアウェアで小ヒットするといくら位なんですか? 

92:デフォルトの名無しさん
08/05/03 11:35:23
あー、昔作ったことあったわ

93:デフォルトの名無しさん
08/05/03 14:35:46
シェアウェアにするほどの価値はあるのか?
どうでもいいのに金払うのが面倒だろ

94:デフォルトの名無しさん
08/05/03 17:50:17
優秀な最大公約数的なソフトがフリーであるのに、
わざわざ得体の知れないシェアを使おうとは思わないな。

それに使うとしても月に一回ぐらいだろ?

95:デフォルトの名無しさん
08/05/03 18:49:16
UNDUP (600円) に対抗して、使用制限無しで500円の販売したらいくつ位売れるのかと
思ったんです。大して売れなくても良いんですけど、
UNDUPを完全に上回ったとしたらどの位かなとおもったんです。

96:デフォルトの名無しさん
08/05/03 23:30:51
自分でそういうソフトを選ぶ基準から考えてみろ。
UNDUPがあるんだし、他の、しかもシェアウェアを
わざわざ選ぶ理由なんてあるか?ゼロだろ。
買われるとしたら、検索もできないネット覚えたての
情報弱者がたまたま最初にみつけて、間違えて買うぐらいだな。
今時小学生でもありえないが。
UNDUP程度なら誰でも作れるんだし、ここでぐだぐだ
売れるかどうか、なんて書いてる奴のソフト、しかも
猿真似のシェアウェアが売れると思うか?
この程度のソフトなんて作っても金にならんぞ。
オクで転売でも始めた方が儲かるんじゃないか?

97:デフォルトの名無しさん
08/05/04 11:28:30
完全フリーにして名前売った方が後々儲かるかも。

98:デフォルトの名無しさん
08/05/04 17:29:09
空気読まずに書くよ

全ファイルのMD5とかSHAハッシュ取ってsortコマンド使えばええやん
殆ど重複はしないでしょ

でかいファイルは4MBくらいで読むの止めて、サイズ一緒に出力しておけばいいし

99:デフォルトの名無しさん
08/05/04 19:56:15
>>98
小学生は大人になってから来てね

100:デフォルトの名無しさん
08/05/20 00:25:58
データの比較方法はわからんが>>1が言うのはこういうのか?
URLリンク(www.vector.co.jp)

101:デフォルトの名無しさん
08/05/25 22:20:27
容貌

画像MD5比較で条件付削除ができるようにして

102:デフォルトの名無しさん
08/05/25 23:09:45
>>101
どんな面しているんだか。

103:デフォルトの名無しさん
08/05/26 00:01:49
どういう意味かと思ったら、容貌から来てるのね。

104:デフォルトの名無しさん
08/05/28 09:02:17
今から作るなら画像/音声/動画の類似性をチェックするぐらいの意気込みでお願いしたい。

105:デフォルトの名無しさん
08/07/19 12:49:02
こんなんで用が足りてますが何か

find /hoge -type f | xargs cksum | perl ckchk.pl | sh

#!/usr/bin/perl
while(<>) {
chomp;
if (m/^(\d+ \d+) (\S+)$/) {
if (defined($filename{$1})) {
printf("diff -q '%s\' '%s\' && rm '%s\'\n", $filename{$1}, $2, $2);
next;
}
else {
$filename{$1} = $2;
}
}
}


106:デフォルトの名無しさん
08/08/18 19:07:30
sage

107:デフォルトの名無しさん
08/08/22 06:34:19
UNDUPおせえw
Win32API使ってる時点でこれが限界か

しかし>>1の着眼点面白すぎだな
2^24個のファイルってMFTが16Gになるぞ
その上ファイルサイズは4G制限かw
てかたった1年前の話なのにCRC16とか出ててフイタw
5年位前のカキコかと思ったわ

108:デフォルトの名無しさん
09/01/06 09:05:41
ほしゅ

109:デフォルトの名無しさん
09/01/06 15:18:16
ハッシュとファイル名をペアにしたキャッシュは取ってんの?
大方>>1の見え透いた用途では、古いファイルが変更される事は
少ないんじゃないか?だったら

キャッシュ.txt:
最終更新年月日
MD5等ハッシュ ファイルパス
MD5等ハッシュ ファイルパス
MD5等ハッシュ ファイルパス
        ・
        ・
        ・

とファイルをフォルダごとに作っておいて、比較対象は最終更新年月日より
タイムスタンプが新しいものに限ると。これだけで>>1の様な用途なら十分
高速に使えると思うぞ。

110:デフォルトの名無しさん
09/01/06 16:56:49
見え透かせるって事は同類か

111:デフォルトの名無しさん
09/01/07 01:56:44
URLリンク(www.vector.co.jp)
これはどう?

112:デフォルトの名無しさん
09/01/10 03:04:16
複数のDVDにバックアップしたデータをまとめてブルーレイに焼きたいのです
でもかぶってるファイルが多数あるのでそれらをまとめてから焼きたいのですが
どうすればいいですか?


113:デフォルトの名無しさん
09/01/10 03:16:16
板違い

114:デフォルトの名無しさん
09/01/10 23:24:31
>>113
ファイルの重複検出ツールのスレですよね?

115:デフォルトの名無しさん
09/01/10 23:33:18
>>114
で、お前はどういう方針でツールを作ろうとしてるの?

116:デフォルトの名無しさん
09/01/11 01:31:35
ってか、システムにファイルを通す際に必ず同じプロセスを通過するようにすればいいんじゃないかなあ。

ファイルコピー→<ファイルチェックプロセス>→ディスク
って感じで。
ファイルサイズとかハッシュが同じファイルを通そうとしたら弾くとか。

117:デフォルトの名無しさん
09/01/11 04:22:32
>>116
馬鹿発見

118:デフォルトの名無しさん
09/01/11 11:05:58
>>114
重複検出ツールを「作ろう」ってスレだろ、JK

119:デフォルトの名無しさん
09/01/12 10:11:42
>>118
その成果だけ頂きたいのです、女子高

120:デフォルトの名無しさん
09/01/12 10:53:45
そういうやつはこっちだ
スレリンク(software板)


121:デフォルトの名無しさん
09/01/13 15:44:22
>>119
未成熟ぎみなのがいいんです、JC

122:デフォルトの名無しさん
09/01/14 13:42:17
数十万個のファイルの中から指定のファイルとほぼ同じ内容のファイルを高速に検索する
方法はないでしょか?

完全一致のファイルならファイル名と MD5 のデータベースを作っておけばファイル数に
関係ない時間で検索できるのですが。

123:デフォルトの名無しさん
09/01/14 14:25:20
>>122
ある通信プロトコルでの相手を決定するための方法だけど、
その数十万個分のファイルに対応するオブジェクトを作る。
指定のファイルのオブジェクトのビット(特徴)を、1こずつそれらに送る。
同じビット(特徴が一致した)なら応答を返す。
応答が最も多かったファイルを「ほぼ同じ内容」と判断する。
ようするに、比較をインクリメンタルにやるという話。
ハードウェアでの通信だと一瞬で判定できる。
それをソフトウェアでやると個数分の時間が掛かる。
まあ総当りするよりは速い。

124:デフォルトの名無しさん
09/01/14 14:31:22
ファイルの一部のMD5つくれば? とる位置を3カ所くらいにして、それが一つでも一致すれば疑わしいとする。
あとは人間が確認する。

125:デフォルトの名無しさん
09/01/14 14:35:59
どうせ、画像ファイルだろ。MD5を作るんじゃなくて、サムネイル画像作ってそいつで比較したら?w

126:デフォルトの名無しさん
09/01/14 14:39:27
画像なら、画像の特徴を比較する必要有り。部分md5では無理

127:デフォルトの名無しさん
09/01/14 17:40:08
サムネイルもインデックスみたいなもんだな

128:デフォルトの名無しさん
09/01/14 22:02:32
最近のコンピュータは高速だからファイルの先頭から1ビットずつ比較しようぜ

129:デフォルトの名無しさん
09/01/14 22:04:27
指紋認証のやり方で特徴点抽出

130:122
09/01/15 14:04:06
122 ですが、ファイルは主にプログラムのソースコードです。

現在使っている MD5 以外の検索方法は
ベースファイル名が一致しファイルサイズが近いものを DB から抽出し、
ファイルの最初の 128KB のバイナリ差分が小さいものに絞り込み、最後に
ファイル全体のバイナリ差分が小さいもの選んでいます。

この方法でそこそこの時間で検索できますが、大幅な絞り込みのために
ファイル名を使っているのでファイル名が全然違うファイルは検索対象に
ならないので困っています。


131:デフォルトの名無しさん
09/01/15 14:27:57
先頭32K(違いが出なかった場合は32K-64K、64-96Kなど)
のMD5を保持しておけよ。

132:デフォルトの名無しさん
09/01/15 14:48:45
ハッシュじゃ類似判定できないだろ

133:デフォルトの名無しさん
09/01/15 15:00:17
ベクトル空間法 類似
でぐぐれ

134:デフォルトの名無しさん
09/01/15 15:09:56
>>130
ソースコードならクラス、メソッド名だけ抽出して比較すりゃ終わりじゃね?
もっと確度上げたいなら変数名も追加

135:デフォルトの名無しさん
09/01/15 15:24:00
バージョン違いのさはどうするんだ

136:デフォルトの名無しさん
09/01/15 19:07:03
調子のんなよカス

137:デフォルトの名無しさん
09/01/15 19:12:13
>>135
お前の恥ずかしさに免じて何も指摘しないでやる

138:デフォルトの名無しさん
09/01/15 19:27:30
クラス名などが一致しても、コードの中身がバージョンのズレにより
大きく代わることがあるだろ。

139:デフォルトの名無しさん
09/01/15 19:28:19
初めから書き直したりした場合だ。

140:デフォルトの名無しさん
09/01/15 19:35:05
>>138
お前なぁ、自分で墓穴掘ってちゃ世話無いだろうが
もう分かったから、そのまま墓穴に埋まっててくれ

141:デフォルトの名無しさん
09/01/16 12:21:29
Mr.Driller 好きだぜ

142:デフォルトの名無しさん
09/01/16 12:27:17
ゆ○ぽのことか?

143:デフォルトの名無しさん
09/01/18 07:35:52
中に特定の文字列がある穴を探して埋まっておけばいいんじゃね

ソースコードだったら大体同じようなクラス名や関数名で書いてるだろ
分かりにくいコード書いてるやつがいたら穴掘って埋めればおk

144:デフォルトの名無しさん
09/01/19 10:40:44
undupとかの重複ファイル検索ソフトの比較スレがあったと思ったんですが、見つかりません。
どなたかご存じないですか?

145:デフォルトの名無しさん
09/01/19 11:21:29
お勧めの重複・類似・近似画像処理ソフト2
スレリンク(software板)


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5379日前に更新/34 KB
担当:undef