FAQ
Hi all, i have this simple script to check if a file has arrive since
the last hour

find2perl tmp -type f -eval '-M $_ < 1/24' -print |perl

but now i would like to check in a remote server, maybe on ftp
session. i have this ftp.pl

perl -w >> ftp.log -MNet::FTP -le'
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek
+, $dayOfYear, $daylightSavings) = localtime();
$year = 1900 + $yearOffset;
$theGMTime = "$hour:$minute:$second, $months[$month] $dayOfMonth,
$year";
( $host, $user, $pass, $dir ) = @ARGV;
$ftp = Net::FTP->new($host) or die "$@\n"; #send mail if cannot
connect do not know how to do it
$ftp->login( $user, $pass ) or die $ftp->message;
$ftp->cwd($dir) or die $ftp->message;
$ftp->binary;
for $file ($ftp->ls){
push @files, $file;
}

for $file (@files) {
$quesesto=localtime($ftp->mdtm($file));
$localtimenoformat=localtime(time());
$mdtmnoformat=$ftp->mdtm($file);
print "MDTM with FORMAT = $quesesto\n";
print "Localtime No Format = $localtimenoformat\n";
print "MDTM No Format = $mdtmnoformat\n";
#envia_mail ();
}
$ftp->quit or die $ftp->message;

sub envia_mail {
print "Content-type: text/html\n\n";

#$title='';
$to="alexis_vasquez\@codetel\.com\.do";
$from= `hostname`;
#$subject='';

open(MAIL, "|/usr/sbin/sendmail -t");

## Mail Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
## Mail Body
print MAIL "This is a test message \n";

close(MAIL);

print "<html><head><title>$title</title></head>\n<body>\n\n";

## HTML content sent, let use know we sent an email
print "
<h1>$title</h1>

A message has been sent from $from to $to

</body></html>";

}

'host user pass dir

Still cant't figure out how to check if file is newer that an hour. I
can get this:

MDTM with FORMAT = Fri Aug 21 12:23:15 2009
Localtime No Format = Fri Aug 13 10:17:10 2010
MDTM No Format = 1250871795

But don't know how to get the 'localtime with NO Format' to compare
with the 'MDTM with NO Format'

Search Discussions

  • Shlomi Fish at Aug 18, 2010 at 12:41 pm
    Hi Atropo,
    On Tuesday 17 August 2010 15:37:51 Atropo wrote:
    Hi all, i have this simple script to check if a file has arrive since
    the last hour

    find2perl tmp -type f -eval '-M $_ < 1/24' -print |perl

    but now i would like to check in a remote server, maybe on ftp
    session. i have this ftp.pl

    perl -w >> ftp.log -MNet::FTP -le'
    Please:

    1. Don't write your program as a gigantic -e '...' block. Instead - put it in
    a separate file. You can't honestly expect us to debug it.

    2. See https://www.socialtext.net/perl5/index.cgi?ancient_perl

    3. "use strict;" and "use warnings;".

    4. Quoting perlbot:

    {{{
    <perlbot> use strict; use warnings; use lexical filehandles instead of globals
    (open my $tmp ..vs.. open TMP), use three argument form of open, don't use
    prototypes unless you really want to. don't call subs with & unless it's
    required (&sub() ..vs.. sub()). check for errors (open (); ..vs.. open() or
    die $!)
    }}}
    ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek
    +, $dayOfYear, $daylightSavings) = localtime();
    You should use a good datetime module instead. I like
    http://search.cpan.org/dist/DateTime/ but there are others.
    $year = 1900 + $yearOffset;
    $theGMTime = "$hour:$minute:$second, $months[$month] $dayOfMonth,
    $year";
    ( $host, $user, $pass, $dir ) = @ARGV;
    $ftp = Net::FTP->new($host) or die "$@\n"; #send mail if cannot
    connect do not know how to do it
    $ftp->login( $user, $pass ) or die $ftp->message;
    $ftp->cwd($dir) or die $ftp->message;
    $ftp->binary;
    for $file ($ftp->ls){
    push @files, $file;
    }

    for $file (@files) {
    $quesesto=localtime($ftp->mdtm($file));
    $localtimenoformat=localtime(time());
    $mdtmnoformat=$ftp->mdtm($file);
    print "MDTM with FORMAT = $quesesto\n";
    print "Localtime No Format = $localtimenoformat\n";
    print "MDTM No Format = $mdtmnoformat\n";
    #envia_mail ();
    }
    $ftp->quit or die $ftp->message;

    sub envia_mail {
    print "Content-type: text/html\n\n";

    #$title='';
    $to="alexis_vasquez\@codetel\.com\.do";
    $from= `hostname`;
    #$subject='';

    open(MAIL, "|/usr/sbin/sendmail -t");

    ## Mail Header
    print MAIL "To: $to\n";
    print MAIL "From: $from\n";
    print MAIL "Subject: $subject\n\n";
    ## Mail Body
    print MAIL "This is a test message \n";

    close(MAIL);

    print "<html><head><title>$title</title></head>\n<body>\n\n";

    ## HTML content sent, let use know we sent an email
    print "
    <h1>$title</h1>

    A message has been sent from $from to $to

    </body></html>";

    You should use a here-document here.
    }

    'host user pass dir
    Don't append the «host» parameter to the end of hte '....' - it will be part
    of the program.
    Still cant't figure out how to check if file is newer that an hour. I
    can get this:

    MDTM with FORMAT = Fri Aug 21 12:23:15 2009
    Localtime No Format = Fri Aug 13 10:17:10 2010
    MDTM No Format = 1250871795

    But don't know how to get the 'localtime with NO Format' to compare
    with the 'MDTM with NO Format'
    Just use timestamps, or use the DateTime module. You can find if a timestamp
    is in the last hour by "time() - $timestamp < 60*60".

    Regards,

    Shlomi Fish

    --
    -----------------------------------------------------------------
    Shlomi Fish http://www.shlomifish.org/
    "The Human Hacking Field Guide" - http://shlom.in/hhfg

    God considered inflicting XSLT as the tenth plague of Egypt, but then
    decided against it because he thought it would be too evil.

    Please reply to list if it's a mailing list post - http://shlom.in/reply .

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupbeginners @
categoriesperl
postedAug 17, '10 at 12:38p
activeAug 18, '10 at 12:41p
posts2
users2
websiteperl.org

2 users in discussion

Atropo: 1 post Shlomi Fish: 1 post

People

Translate

site design / logo © 2022 Grokbase