我正在尝试检索远程ftp站点上文件的上次修改时间,如下所示:
my $ua = LWP::UserAgent->new;
my $index = $ua->get($ftp); # where $ftp contains the url to the ftp-folder of interest
print $index->decoded_content;
然而,这会打印遥控器的内容,如下所示:
-rw-r--r-- 1 user group size Month Date Year filename
我希望内容包含小时:分钟:秒,格式为'ls -l':
-rw-r--r-- 1 user group size Year-Month-Date hour:minute:seconds filename
我该怎么做?
答案:
感谢下面接受的答案,我了解到get()会给出LIST
的回复,其中MLSD
包含我需要的所有信息。
use strict;
use warnings;
use Net::FTP;
my $host=$ARGV[0];
my $ftp = Net::FTP->new($host) or die "Can't open $host\n";
$ftp->login;
my @mlsd=$ftp->_list_cmd("MLSD",".") or die "MLSD failed:",$ftp->message;
for my $content (@mlsd) {
next unless (index($content, "type=file") != -1);
my @info = split ";",$content;
my $filename=$info[5];
(my $filesize = $info[1]) =~ s/size=//g;
(my $filedate=$info[2]) =~ s/modify=//g;
$filedate =~ s/^(....)(..)(..)(..)(..)(..)\z/$1-$2-$3 $4:$5:$6/s;
printf ("%-20s %10s %11s\n",$filename,$filesize,$filedate);
}
$ftp->quit;
exit;
如果可以通过LWP::UserAgent
实现这一点,那当然会很好。
答案 0 :(得分:0)
您获得的是FTP LIST
命令的原始输出。不幸的是,此命令的输出格式未标准化。但您可以使用MDTM
命令获取修改时间。 LWP::UserAgent
不支持此功能,因此您必须直接使用Net::FTP
:
use Net::FTP;
my $ftp = Net::FTP->new($host);
$ftp->login;
for my $file ($ftp->ls) {
next if $file eq '.' || $file eq '..';
my $time = $ftp->mdtm($file); # UNIX timestamp
my ($sec, $min, $hour, $mday, $mon, $year) = localtime($time);
printf(
"$file: %04d-%02d-%02d %02d:%02d:%02d\n",
$year + 1900, $mon + 1, $mday,
$hour, $min, $sec,
);
}