Как я могу получить последний измененный каталог ftp в Perl в Windows? - PullRequest
0 голосов
/ 17 февраля 2012

С помощью моего @dir = $ ftp-> ls () я могу получить список всех каталогов, но только один из них последний, как я могу отфильтровать этот.Я использую Windows OS, и эти каталоги от FTP.

Thnaks

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Строка, возвращаемая $ ftp-> dir, может варьироваться в зависимости от типа используемого вами ftp-сервера.Конфигурации ОС и пользователей также могут влиять на формат строки, поэтому анализ этой строки может привести к проблемам, даже если это будет быстрое решение.Намного проще использовать $ ftp-> mdtm ($ file).Возвращает дату и время последнего изменения как время эпохи.Простой!

1 голос
/ 17 февраля 2012

Вы получите qucik и грязный хак за ваш небрежно сформулированный вопрос:

Первый:

Если вы используете Net :: FTP

, вам нужно позвонить

 $ftp->dir() 

, а не

$ftp->ls()

для получения длинного списка каталогов.

Затем попробуйте это:

use feature "say";
use Net::FTP;
use Date::Parse;

    $ftp = Net::FTP->new("ftp", Debug => 0)
      or die "Cannot connect to some.host.name: $@";

    $ftp->login("anonymous",'-anonymous@')
      or die "Cannot login ", $ftp->message;

    $ftp->cwd("/pub")
      or die "Cannot change working directory ", $ftp->message;

    @dir = $ftp->dir()
      or die "ls()/dir() failed ", $ftp->message;
#map {say } @dir;

#Now parse the array of strings that dir() returned    
#magic numbers to find substring with modif-date
my $start = 44;
my $len = 10;
@dir = map {$_->[0]} sort {$b->[1] <=> $a->[1]} map {[$_, str2time(substr($_, $start, $len))] } grep {/^d/}  @dir;

$latest = $dir[0];

Это будет работать толькодля каталогов с этим форматом

drwxr-xr-x  17 root     other       4096 Apr 12  2010 software

, но не с этим (примечание: год отсутствует)

drwxr-xr-x  36 root     root        4096 Nov 29 09:14 home

Код также будет игнорировать символические ссылки, такие как:

lrwxrwxrwx   1 root     root           8 May 30  2011 i -> incoming

но это даст вам начало.

Конструкция

   map{} sort{} map {} @array;

называется «преобразованием Шварца» и выполняет большую часть работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...