#!/usr/bin/perl -w use strict; use warnings; use File::Find qw(finddepth); use File::Slurp; use Data::Printer; use Digest::MD5 qw(md5 md5_hex md5_base64); #sudo mount -t cifs //gw004/Versaflow /media/versashare -o username=administrator,password=8-Tung,domain=mlands my @f = read_file('missing_bios_report.txt'); my $md = {}; write_file('anal.txt'); write_file('doppel.txt'); my $bios = ''; for my $l ( @f ) { $l = $l =~ s/\R//r ; if ( $l =~ /Path\: (.*)/ ) { $bios = $1; } elsif ( $l =~ /^ (................................)/ ) { $md->{$1} = $bios; # append_file('anal.txt', "$1 - $bios\n") } } my $ctx = Digest::MD5->new; my $share = '/mnt/d/Konsolen/BIOS'; #my $share = '/media/versashare/versaflow1/Protocol/'; my $multimd5 = {}; my @analyse; finddepth( sub { return if($_ eq '.' || $_ eq '..'|| $_ eq '.keep' ); if ( -f $File::Find::name ) { open(my $fh, '<', $File::Find::name) or die "cannot open file $File::Find::name"; $ctx->addfile($fh); my $m = $ctx->hexdigest; if ( $multimd5->{$m} ) { my @temp = @{$multimd5->{$m}}; push @temp, $File::Find::name; $multimd5->{$m} = \@temp; } else { my @temp = ( $File::Find::name ); $multimd5->{$m} = \@temp; } if ($md->{ uc $m }) { push @analyse, "$md->{ uc $m } <- $File::Find::name"; } close($fh); } }, $share); for my $k ( sort @analyse ) { append_file('anal.txt', "$k\n") } for my $k ( keys %{$multimd5} ) { if ( scalar @{ $multimd5->{$k} } > 1 ) { for my $i ( @{ $multimd5->{$k} } ) { append_file('doppel.txt', "$k - $i\n") } } }