Perl脚本列出所有文件

时间:2011-09-02 06:06:10

标签: regex perl file download

我有一个网站,其中存储了一些下载文件。 说该网站包含

等文件
GTP-UGP-LATEST-5.3.0.123.iso
GTP-UGP-LATEST-5.3.0.127.iso
GTP-UGP-LATEST-5.3.0.132.iso
GTP-UGP-LATEST-5.3.0.136.iso

PRE-UGP-LATEST-5.3.0.124.iso
PRE-UGP-LATEST-5.3.0.126.iso
PRE-UGP-LATEST-5.3.0.127.iso
PRE-UGP-LATEST-5.3.0.130.iso

这些文件的数量会随着版本号的增加而逐日增加。

我的最终目标是每天运行脚本(cronjob)以检查是否添加了任何新文件,如果是,则下载所有添加的新文件。

我的逻辑是获取以GTP *开头的所有文件的版本号(例如5.3.0.123)将其转换为(530123)然后进行比较以获得最大数字,然后检查存储在以前下载的版本号本地文件。如果不匹配,我们下载具有以GTP开头的最大版本号的文件

我们与以PRE *

开头的文件类似

我很穷是正则表达,请帮助我。

请让我知道列出链接中的所有文件,然后将其写入本地文件。如果我知道那么多,我想我可以从那里拿走它

2 个答案:

答案 0 :(得分:0)

更新:我会做以下(测试):

#!/usr/bin/env perl

use Data::Dumper qw(Dumper);
use File::Glob ':glob';

sub by_version {
  my $v_a = $a;
  my $v_b = $b;
  $v_a =~ s/[^\d\.]//g;
  $v_b =~ s/[^\d\.]//g;
  my @version_a = split(/\./, $v_a);
  my @version_b = split(/\./, $v_b);

  for (my $i = 0; $i < scalar(@version_a); $i++) {
    my $comp = $version_a[$i] <=> $version_b[$i];
    return $comp if ($comp != 0);
  }

  return 0;
}

my @files = bsd_glob('GTP-UGP-LATEST-*.iso');
my @sorted_files = sort by_version @files;
print Dumper(@sorted_files);

答案 1 :(得分:0)

或者您可以从下载目录中进行rsync,因为您只需要新的。