查找系列中缺少文件的代码

时间:2010-07-18 05:23:24

标签: perl scripting series

我正在寻找一行代码来识别一系列文件中的丢失文件,并将列表导出到txt文件。例如:名为1to100000的目录包含名为1,2 ... 99999,100000的pdf,但缺少系列中的一些。我希望脚本将这些丢失的文件报告给txt文件。理想情况下,这将是一个可执行的perl脚本。 谢谢, 杰克

3 个答案:

答案 0 :(得分:3)

只需从1到100000计数,然后检查文件是否存在。

foreach my $num ( 1 .. 100000 ) { 
    my $fname = "1to100000/$num.pdf";
    print "missing $fname\n" unless -f $fname;
}

答案 1 :(得分:3)

使用readdir:

my @expect = map "$_.pdf", 1..100000;
my %notfound;
@notfound{@expect} = ();

opendir my $dirh, "1to100000" or die "Couldn't open directory: $!";
while ( my $fname = readdir($dirh) ) {
    delete $notfound{$fname};
}

for my $fname (@expect) {
    if ( exists $notfound{$fname} ) {
        print "missing $fname\n";
    }
}

答案 2 :(得分:0)

以下是在范围内查找缺失数字的示例(使用Set :: IntSpan)。

#!/usr/bin/perl
use strict;
use warnings;

use Set::IntSpan;

# the last sector on disk
my $end_sect = 71127179;

# The complete range of sectors on the disk
my $range = Set::IntSpan->new( "0-$end_sect" );

# The ranges of used sectors
my $used = Set::IntSpan->new( 
'0-1048706,1048707-2097414,69078879-71127179' );

# Calculates the remaining unused sectors
my $unused = $range->diff( $used );

print $unused->run_list;