Как получить дату и время изменения ftp-каталога с помощью Perl-скрипта

Я написал один сценарий Perl, который войдет на ftp-сервер Unix и проверит, нормально ли обрабатываются файлы в определенных каталогах. Если файл был обнаружен более чем на 10 минут в этих каталогах обработки, он вызовет предупреждение на почтовый идентификатор моей команды.

Этот сценарий Perl запускается на сервере Windows через пакетный файл, который был запланирован в планировщике заданий, и будет запускаться каждые 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