从单个目录中删除具有重复内容的文件[Perl或算法]
发布时间:2020-12-15 21:54:30 所属栏目:大数据 来源:网络整理
导读:我有一个包含大量文件的文件夹,其中一些文件具有完全相同的内容.我想删除包含重复内容的文件,这意味着如果找到两个或多个重复内容的文件,我想留下其中一个文件,并删除其他文件. 以下是我提出的,但我不知道它是否有效:),还没试过. 你会怎么做? Perl或一般算
我有一个包含大量文件的文件夹,其中一些文件具有完全相同的内容.我想删除包含重复内容的文件,这意味着如果找到两个或多个重复内容的文件,我想留下其中一个文件,并删除其他文件.
以下是我提出的,但我不知道它是否有效:),还没试过. 你会怎么做? Perl或一般算法. use strict; use warnings; my @files = <"./files/*.txt">; my $current = 0; while( $current <= $#files ) { # read contents of $files[$current] into $contents1 scalar my $compareTo = $current + 1; while( $compareTo <= $#files ) { # read contents of $files[compareTo] into $contents2 scalar if( $contents1 eq $contents2 ) { splice(@files,$compareTo,1); # delete $files[compareTo] here } else { $compareTo++; } } $current++; } 解决方法
Perl,带Digest :: MD5模块.
use Digest::MD5 ; %seen = (); while( <*> ){ -d and next; $filename="$_"; print "doing .. $filenamen"; $md5 = getmd5($filename) ."n"; if ( ! defined( $seen{$md5} ) ){ $seen{$md5}="$filename"; }else{ print "Duplicate: $filename and $seen{$md5}n"; } } sub getmd5 { my $file = "$_"; open(FH,"<",$file) or die "Cannot open file: $!n"; binmode(FH); my $md5 = Digest::MD5->new; $md5->addfile(FH); close(FH); return $md5->hexdigest; } 如果Perl不是必须的并且您正在使用* nix,则可以使用shell工具 find /path -type f -print0 | xargs -0 md5sum | awk '($1 in seen){ print "duplicate: "$2" and "seen[$1] } ( ! ($1 in seen ) ) { seen[$1]=$2 }' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |