#! /usr/local/bin/perl -w use strict; use Net::FTP; my $host = 'ftp.example.com'; my $user = 'anonymous'; my $pass = 'grinder@localhost'; my $remote = '/pub'; my $ftp = Net::FTP->new($host); # error $ftp->login($user,$pass); # checking my @listing = $ftp->dir($remote); # omitted my $latest_timestamp = 0; my $latest = undef; my $cur_year = (localtime)[5] + 1900; for my $line( @listing ) { my( $prot, $links, $user, $group, $size, $month, $day, $yeartime, $entry ) = ($line =~ /^(\S+)\s+(\d+)\s+(\w+)\s+(\w+)\s+(\d+)\s+(\w+)\s+(\S+)\s+(.*)$/); if( $entry =~ /^(\d\d)(\d\d)i86\.exe$/ ) { my( $year, $hour, $min ) = do { $yeartime =~ /^(\d\d):(\d\d)$/ ? ( $cur_year, $1, $2 ) : ( $yeartime, 0, 0 ) }; my $timestamp = sprintf '%04d%02d%02d%02d%02d', $year, $month, $day, $hour, $min; if( $latest_timestamp lt $timestamp ) { $latest_timestamp = $timestamp; $latest = $entry; } } } exit unless $latest_timestamp; my $prev = undef; if( open IN, 'latest' ) { $prev = ; close IN; chomp $prev; } if( !defined($prev) or $prev lt $latest_timestamp ) { $ftp->get("$remote/$entry"); open OUT '>latest' or die "latest for output: $!\n"; print "$latest_timestamp\n"; close OUT; }