Как да получите модифицирана дата и час на ftp директория с помощта на perl скрипт

Написах един Perl скрипт, който ще влезе в ftp Unix сървър и ще провери дали файловете се обработват добре в определени директории. Ако файлът е бил ударен повече от 10 минути в тези директории за обработка, това ще задейства предупреждение до имейл ID на моя екип.

Този Perl скрипт се изпълнява на Windows сървър чрез пакетен файл, който е планиран в Task Scheduler и ще се изпълнява на всеки 5 минути. Мога да получа и преобразувам времето на ftp файловете във времената на сървъра на Windows. Всичко работи перфектно до сега.

Сега имам ново изискване да проверя датата на последна промяна на резервна директория в същия ftp сървър. Първоначално идеята ми е да изброя файловете и да получа датата на последния получен файл (което е подобно на горния процес, който споменах). Но основното ми ограничение е, че резервната директория ще има почти 1000 файлове и списъкът и получаването на време не е добър метод.

По-долу е модулът, който използвах преди това за получаване на час и дата на FTP файлове.

use File::Listing qw(parse_dir);

person Amareesh    schedule 06.05.2014    source източник


Отговори (3)


Операцията stat DIRHANDLE в Perl, когато се представи името на пътя на директория, представя масив от информация за елемента. В масива е времето за модификация.

Вижте stat

Може да се наложи да си поиграете с това, за да го накарате да работи правилно, особено ако настъпят промени в поддиректориите на директорията, върху която наблюдавате времето за модификация.

person O. Jones    schedule 06.05.2014

можете да използвате този код, за да видите подробности за файловете във всяка конкретна папка:

use strict;
use warnings;
use Net::FTP;

my ($ftp, $host, $user, $pass, $source_dir);
$host = "your_host_name";
$user = "Your_user_id";
$pass = "Your_password";
$source_dir = "any_source_DIR";
print "Connect in...\n";
$ftp = Net::FTP->new($host, Debug => 0) || die "Couldn't ftp to $host: $@";

print "Logging in...\n";
$ftp->login($user, $pass) || die "Couldn't login to $host: ".$ftp->message;

print "Getting files from \"$source_dir\"\n";
$ftp->cwd($source_dir);

my @files = $ftp->dir();

foreach (@files){
    print "$_ \n";
}
person Nikhil Ranjan    schedule 09.01.2021

(CC)http://www.perlmonks.org/?node_id=190020

my $file_mdtm = $f->mdtm($file) or die "Can't find $file in $dir\n";

my $five_days = 3600*24*5;    # five days in seconds

  if (time - $file_mdtm >= $five_days)

  {

print "$file is more than 5 days old\n";

  }
person LiloDrako    schedule 13.05.2014
comment
Това не е отговор на въпроса. - person Xaver Kapeller; 13.05.2014