特定のトピックに関連するファイルをインターネットからダウンロードしました。ここで、ファイルに重複があるかどうかを確認したいと思います。問題は、ファイルの名前が異なることですが、内容は一致する可能性があります。
複数のフォルダを反復処理し、どのファイルが重複しているかを通知するコードを実装する方法はありますか?
特定のトピックに関連するファイルをインターネットからダウンロードしました。ここで、ファイルに重複があるかどうかを確認したいと思います。問題は、ファイルの名前が異なることですが、内容は一致する可能性があります。
複数のフォルダを反復処理し、どのファイルが重複しているかを通知するコードを実装する方法はありますか?
MD5
フォルダーを再帰的にトラバースし、各ファイルの を見つけてから、重複するMD5
値を探すことができます。これにより、重複したファイルのコンテンツが賢明になります。これをどの言語で実装しますか?
以下は、上記のことを行う Perl プログラムです。
use strict;
use File::Find;
use Digest::MD5 qw(md5);
my @directories_to_search = ('a','e');
my %hash;
find(\&wanted, @directories_to_search);
sub wanted {
chdir $File::Find::dir;
if( -f $_) {
my $con = '';
open F,"<",$_ or die;
while(my $line = <F>) {
$con .= $line;
}
close F;
if($hash{md5($con)}) {
print "Dup found: $File::Find::name and $hash{md5($con)}\n";
} else {
$hash{md5($con)} = $File::Find::name;
}
}
}
すべてのファイルを再帰的に検索し、サイズ、2 つ以上のファイルのバイト サイズで並べ替え、MD5 ハッシュまたは SHA1 ハッシュ計算を実行して、それらが実際に同一であるかどうかを確認します。
正規表現は、この問題には役立ちません。
ネット上にはたくさんのコード例がありますが、今はこのコードをノックアウトする時間がありません。(これはおそらくいくつかの反対票を引き出すでしょう-肩をすくめます!)