Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写Perl脚本来计算目录中每个文件的MD5和?_Perl_Unix_Md5_Md5sum - Fatal编程技术网

如何编写Perl脚本来计算目录中每个文件的MD5和?

如何编写Perl脚本来计算目录中每个文件的MD5和?,perl,unix,md5,md5sum,Perl,Unix,Md5,Md5sum,有没有办法编写一个Perl脚本来计算目录中每个文件的MD5sum 如果是这样,我该怎么做呢?也许使用find和-exec可以完成这项工作 find . -name "*.*" -exec md5sum '{}' \; “{}”将替换为每个文件的名称 使用opendir和readdir或其他递归方法。 以下是一个例子: #!/usr/bin/perl -w use warnings; my $DIR_PATH="a"; opendir DIR, ${DIR_PATH} or die "Can

有没有办法编写一个Perl脚本来计算目录中每个文件的MD5sum


如果是这样,我该怎么做呢?

也许使用
find
-exec
可以完成这项工作

find . -name "*.*" -exec md5sum '{}' \; 

“{}”将替换为每个文件的名称

使用
opendir
readdir
或其他
递归方法
。 以下是一个例子:

#!/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;
}
#/usr/bin/perl-w
使用警告;
我的$DIR_PATH=“a”;
opendir DIR、${DIR\u PATH}或die“无法打开\”$DIR\u PATH \“\n”;
@filelist=readdir;
foreach$文件(@filelist){
打开(在“a/$file”中)或死“无法打开”;
while(){…}
接近;
}

有很多方法可以做到这一点,但归根结底,您需要执行两个操作。首先需要找到要运行检查的文件列表,然后需要对每个文件运行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校验和部分然后由模块完成,这就是我认为您最终要寻找的


我确实喜欢你的问题,因为它是开放式的,有很多可能的解决方案,比如所有“我如何在perl中做到这一点?”问题,所以我相信你会得到很多可能的解决方案,我很可能会在我稍后回家时更新我的解决方案。

获取目录中的文件列表。读每一本。计算内容的MD5和。打印它。如何从perl访问ls命令?我应该将列表的内容读入数组吗?然后,是否可以对存储在数组中的每个文件名使用系统的md5sum命令?“上面将获取目录中每个文件的md5sum…”你不是在计算文件名而不是文件名的md5sum吗?通常使用glob比使用尖括号更好。@Kenosis你是对的,我修改了代码。@stark是的,这就是我在公共汽车上试图用电话回答的结果。@james28909你能在新问题中发布它作为这个问题的继续吗?还有一些额外的细节,比如数组中有什么需要正确回答。