같은 크기의 파일 비교해서 찾아내기...
      글쓴이: oldbell / 작성시간: 금, 2008/04/25 - 4:16오후    
  
  aaaa.jpg
aaaa_thumb.jpg
....
aaaz_jpg
aaaz_thumb.jpg
jpg file과 thumbnail file이 같은 폴더에 있는데
어떤 경우에는 원본과 thumbnail 크기가 같은 경우가 있습니다.
갯수가 많아서(백만단위) find 나 shell script로 해당 파일을 찾아보려고 합니다.
좋은 방법이 없을까요?
Forums: 


Perl Wicked-Cool Script 에 그에 관한 내용이 있습니다.
Perl Wicked-Cool Script 에 그에 관련된 내용이 있습니다.
하나 사보셔도 되겠지만... 흠...
perl blah.pl [디렉토리] 하시면 됩니다.
문제가 될 경우 자삭하겠습니다(그 내용 그대로 퍼와서..;;)
#!/usr/bin/perl use strict; use warnings; use File::Find; use Digest::MD5; sub find_dups { my @dir_list = @_; if ($#dir_list < 0) { return undef; } my %files; find( sub { -f && push @{ $files{(stat(_))[7]}}, $File::Find::name }, @dir_list ); my @result = (); foreach my $size (keys %files) { if ($#{$files{$size}} < 1) { next; } my %md5; foreach my $cur_file (@{$files{$size}}) { open my $fh, "<", $cur_file or next; binmode($fh); push @{$md5{ Digest::MD5->new->addfile(*$fh)->hexdigest} }, $cur_file; close $fh; } foreach my $hash (keys %md5) { if ($#{$md5{$hash}} >= 1) { push @result, [@{$md5{$hash}}]; } } } return @result; } my @dups = find_dups(@ARGV); foreach my $cur_dup (@dups) { print "Duplicates\n"; foreach my $cur_file (@{ $cur_dup }) { print "\t$cur_file\n"; } }____________________
use perl;
use perl;
perl 코드입니다.
저라면 find, shell로 삽질하느니 그냥 Perl로 하겠습니다. 요즘 Perl 안 깔린 서버는 없죠? :)
search.pl
#!/usr/bin/perl use strict; use warnings; use File::Find; sub process { if ( -f $_ and $_ =~ m/_thumb\.jpg$/o ) { my $org_file = $_; $org_file =~ s/_thumb//o; print "$_, $org_file are equal.\n" if -s $_ == -s $org_file; } } find( { wanted=>\&process }, $ARGV[0]);사용법
관심가져 주셔서
관심가져 주셔서 감사합니다.
인생의 무게를 느껴라. 아는 만큼 보이는게다.
댓글 달기