如何在Windows上以Perl获取上次修改的ftp目录?
通过我的@dir=$ftp->ls(),我可以得到所有目录的列表,但其中一个是最新的,我如何过滤该目录。我使用的是windows操作系统,这些目录来自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
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;