如何在Windows上以Perl获取上次修改的ftp目录?

如何在Windows上以Perl获取上次修改的ftp目录?,perl,Perl,通过我的@dir=$ftp->ls(),我可以得到所有目录的列表,但其中一个是最新的,我如何过滤该目录。我使用的是windows操作系统,这些目录来自FTP Thnaks你会因为你粗心的问题而受到严厉的批评: 第一: 假设您使用的是Net::FTP 你必须打电话 $ftp->dir() 而不是 $ftp->ls() 获取长目录列表 然后试试这个: use feature "say"; use Net::FTP; use Date::Parse; $ftp = Net

通过我的@dir=$ftp->ls(),我可以得到所有目录的列表,但其中一个是最新的,我如何过滤该目录。我使用的是windows操作系统,这些目录来自FTP


Thnaks

你会因为你粗心的问题而受到严厉的批评:

第一:

假设您使用的是Net::FTP

你必须打电话

 $ftp->dir() 
而不是

$ftp->ls()
获取长目录列表

然后试试这个:

use feature "say";
use Net::FTP;
use Date::Parse;

    $ftp = Net::FTP->new("ftp", Debug => 0)
      or die "Cannot connect to some.host.name: $@";

    $ftp->login("anonymous",'-anonymous@')
      or die "Cannot login ", $ftp->message;

    $ftp->cwd("/pub")
      or die "Cannot change working directory ", $ftp->message;

    @dir = $ftp->dir()
      or die "ls()/dir() failed ", $ftp->message;
#map {say } @dir;

#Now parse the array of strings that dir() returned    
#magic numbers to find substring with modif-date
my $start = 44;
my $len = 10;
@dir = map {$_->[0]} sort {$b->[1] <=> $a->[1]} map {[$_, str2time(substr($_, $start, $len))] } grep {/^d/}  @dir;

$latest = $dir[0];
但与此不同(注:年份缺失)

代码还将忽略符号链接,例如:

lrwxrwxrwx   1 root     root           8 May 30  2011 i -> incoming
但它会给你一个开始


构造被称为“Schwartzian转换”,并完成大部分工作。

由$ftp->dir返回的字符串可能因您访问的ftp服务器类型而异。操作系统和用户配置也会影响字符串的格式,因此解析此字符串可能会导致问题,尽管这似乎是一个快速的解决方案。使用$ftp->mdtm($file)要容易得多。这会将上次修改的日期和时间返回为历元时间。简单

提供更多的上下文。这不是问SO问题的方式。所以你有一个文件列表,在数组@dir中每个元素有一个文件/目录条目……是吗?在描述的开头有一个“d”的条目是目录,时间戳也可以作为元素之一使用。
drwxr-xr-x  36 root     root        4096 Nov 29 09:14 home
lrwxrwxrwx   1 root     root           8 May 30  2011 i -> incoming
   map{} sort{} map {} @array;