Пытаюсь написать скрипт проверяющий изменились ли файлы, при помощи утилиты md5sum. Но изменений скрипт не видит, плюс выдает странные значения.
./script text.txt
cat md5.txt
text.txt||302c3977fb0e4cacebcb39b19380bd18
nano text.txt #Меняем файл
./script text.txt
cat md5.txt
text.txt||37dae57c382a5f3e025331595d62a5ae #Файл изменен - реакции нет
t||e #Откуда это взялось?
#!/usr/bin/perl
use strict;
sub md5hash { #Определение хеша
my $file = shift(@_);
my ($hash) = (`md5sum \'$file\'` =~ /^(\w*) +$file/);
return $hash;
}
open Base, "<", "md5.txt"
or warn "Не могу открыть базу md5.txt - $!";
open Out, ">", "md5.tmp"
or warn "Не могу открыть md5.tmp - $!";
my %hash_file; #Открытие базы
for (<Base>) {
chomp;
my ($key, $value) = split/||/;
$hash_file{$key} = $value;
}
close Base;
my @file = <@ARGV>; #Обработка аргументов
for (@file) {
my $file = $_;
if ($hash_file{$file}) {
my $hash = md5hash($file);
print "Файл $file - изменен\n" unless $hash ~~ $hash_file{$file}; #Не работает
} else {
$hash_file{$file} = md5hash($file)};
}
for (keys %hash_file) {
print Out "$_||$hash_file{$_}\n";
#~ print "$_||$hash_file{$_}";
}
close Out;
rename "md5.tmp", "md5.txt";