Perl скрипт для вывода списка всех файлов - PullRequest
0 голосов
/ 02 сентября 2011

У меня есть веб-сайт, где хранятся некоторые файлы для скачивания.скажем, на сайте есть такие файлы, как

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 *

Im бедное регулярное выражение, пожалуйста, помогите мне в этом.

Пожалуйста, дайте мне знать, чтобы перечислить все файлы в ссылке, а затем записать его влокальный файл.Если я знаю так много, то я думаю, что могу взять это оттуда

Ответы [ 2 ]

0 голосов
/ 03 декабря 2012

Или вы можете просто rsync из каталога загрузки, так как вам нужны только новые.

0 голосов
/ 02 сентября 2011

Обновлено: Я бы сделал следующее (проверено):

#!/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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...