尝试使用 perl 创建 rar 和 7z 的存档测试器

尝试使用 perl 创建 rar 和 7z 的存档测试器

我正在尝试用 perl 为 rar 和 7z 的目录创建一个存档测试器,我的 7z 无法处理 rar,而且我无法为 7z 安装 rar 功能。

我借用了一个 PERL 脚本并对其进行了调整以适合 rar 使用

$unrar = "unrar";  #path to 7z.exe from 7-zip program, make sure to use \\ and not single \ in path
$filetypes_rar = "rar";  #filetypes to test, use | between types
$skipdir = "System Volume Information|$RECYCLE.BIN|corrupt";   #don't scan these directories, use | between names

open (OUT, ">>!corrupt.txt");
listdir(".");
printf ("%-79s\n", " ");
print "\n--- Done ---\n";
sleep(600);
close (OUT);
exit;

sub listdir{
    my ($dir) = @_;
    my ($file, @files, @list);
    opendir(DIR, $dir) || return;
    @files = grep { /^[^.]/} readdir(DIR);
    closedir DIR;

    foreach $file(sort(@files)) {
        if (-d "$dir\\$file") {
            if (! ($file =~/^$skipdir$/i)) {
                listdir("$dir\\$file");
            }
        } elsif ($file =~ /\.($filetypes_rar)$/i) {
            open (DATA, "\"$unrar\" t \"$dir\\$file\"|");
            @list = <DATA>;
            close(DATA);
            $info = $list[$#list-1];
            if ($info =~ /Sub items Errors: (\d+)/) {
                if ($1 == 1) {
                    printf ("%-79s\n", substr($file,0,70).": $1 Error");
                } else {
                    printf ("%-79s\n", substr($file,0,69).": $1 Errors");
                }
                print OUT "$dir\\$file\t$1\n";
                if(not (-e "corrupt\\$file")) {
                    rename  ("$dir\\$file", "corrupt\\$file");
                }
            } else {
                printf ("%-79s\r", substr($file,0,75).": OK");
            }
        }
    }
}

我的问题是损坏的档案和正确的工作档案的以下输出

Cannot open .\corrupttestcase.rar
No such file or directorycorrupttestcase.rar: OK
Cannot open .\ok_file.rar

抱歉,我确实需要这个才能工作,但是我的 perl 知识为零

相关内容