我們希望創建一個報告,其中包含磁帶上的tar歸檔文件和磁盤上的文件之間的MD5檢查。我創建了一個應該執行此操作的腳本,但它使用tar文件正常工作,但在磁帶上使用tar時失敗。 tar用gnu tar寫入磁帶。使用MD5將磁帶和磁盤中的文件與perl archive :: tar進行比較失敗
use strict;
use warnings;
use Archive::Tar;
use Digest::MD5 qw(md5 md5_hex md5_base64);
my $tarfile = '/dev/rmt/1';
my $iter = Archive::Tar->iter($tarfile, 1, {md5 => 1});
print "------------ TAR MD5 ----------- ----------- FILE MD5 ----------- ----- File -----\n";
while(my $f = $iter->()) {
if ($f->is_file != 0) {
my $tarMd5 = md5_hex($f->get_content);
my $filename = $f->full_path;
my $fileMd5 = '';
if (-e $filename) {
open(HANDLE, "<", $filename);
$fileMd5 = md5_hex(<HANDLE>);
} else {
$fileMd5 = "!!!!!!! FILE IS MISSING !!!!!!!!";
}
if ($tarMd5 eq $fileMd5) {
print "$tarMd5 <--> $fileMd5 --> $filename\n";
} else {
print "$tarMd5 ><>< $fileMd5 --> $filename\n";
}
}
}
至於說,使用基於文件的tar文件的時候,但在磁帶上使用焦油,當我們得到錯誤的原理正確:
Use of uninitialized value in subroutine entry at check_archive.pl line 12. Can't use string ("") as a subroutine ref while "strict refs" in use at check_archive.pl line 12. my $f is not defined.
穿上'打印 「OBJ:[$ F] \ n」;''裏面while'。 – 2014-09-03 08:42:14
它永遠不會進入這個時代的內部。添加該行不顯示任何輸出。 我們加了 '$ Archive :: Tar :: WARN = 1; $ Archive :: Tar :: DO_NOT_USE_PREFIX = 1;' 但是目前我們不再發生錯誤,但它仍然不讀取磁帶。 – Ronald 2014-09-03 14:23:11