Есть ли способ написать сценарий Perl для вычисления суммы MD5 каждого файла в каталоге?
Если да, то как я могу это сделать?
Есть ли способ написать сценарий Perl для вычисления суммы MD5 каждого файла в каталоге?
Если да, то как я могу это сделать?
Ну, есть много способов сделать это, но все сводится к двум операциям, которые вам нужно выполнить. Сначала вам нужно будет найти список файлов, которые вы хотите проверить, а затем вам нужно будет запустить проверку md5sum для каждого из этих файлов. Существует множество способов сделать это, но следующие должны работать для ваших нужд.
#!/usr/bin/perl
use strict;
use warnings;
use Digest::MD5 qw(md5_hex);
my $dirname = "/home/mgreen/testing/";
opendir( DIR, $dirname );
my @files = sort ( grep { !/^\.|\.\.}$/ } readdir(DIR) );
closedir(DIR);
print "@files\n";
foreach my $file (@files) {
if ( -d $file || !-r $file ) { next; }
open( my $FILE, $file );
binmode($FILE);
print Digest::MD5->new->addfile($FILE)->hexdigest, " $file\n";
close($FILE);
}
Вышеприведенное извлечет md5sum для каждого файла в каталоге, пропустит все подкаталоги и напечатает его в STDOUT. Часть контрольной суммы MD5 затем выполняется модулем Digest::MD5, что в конечном итоге и является тем, что я думаю, что вы ищете.
Мне нравится ваш вопрос, поскольку он не имеет ограничений и предлагает множество возможных решений, таких как «Как мне сделать это в Perl?» вопросы, поэтому я уверен, что вы получите много возможных решений, и я, скорее всего, обновлю свои, когда вернусь домой позже.
Может быть, использование find
с -exec
поможет?
find . -name "*.*" -exec md5sum '{}' \;
'{}' будет заменено именем каждого файла.
Используйте opendir
и readdir
или другие recursive method
. Вот пример:
#!/usr/bin/perl -w
use warnings;
my $DIR_PATH="a";
opendir DIR, ${DIR_PATH} or die "Can not open \"$DIR_PATH\"\n";
@filelist = readdir DIR;
foreach $file (@filelist) {
open(IN,"a/$file")or die "cannot open";
while(<IN>){...}
close IN;
}