我的@dir = $ ftp-> ls()我可以得到所有目錄的列表,但女巫是最新的我如何過濾那個。我使用的是Windows操作系統,這些目錄來自FTP。如何在Windows上獲得Perl上最後修改的ftp目錄?
Thnaks
我的@dir = $ ftp-> ls()我可以得到所有目錄的列表,但女巫是最新的我如何過濾那個。我使用的是Windows操作系統,這些目錄來自FTP。如何在Windows上獲得Perl上最後修改的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: [email protected]";
$ftp->login("anonymous",'[email protected]')
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];
這將只能用於目錄這種格式
drwxr-xr-x 17 root other 4096 Apr 12 2010 software
但與此(注:年失蹤)
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;
結構被稱爲 「變換的Schwartzian」,並做了大部分工作。
$ ftp-> dir返回的字符串可能因您正在訪問的ftp服務器的類型而異。操作系統和用戶配置也會影響字符串的格式,因此解析該字符串可能會導致問題,即使它似乎是一個快速解決方案。使用$ ftp-> mdtm($ file)要容易得多。這將返回上次修改的日期和時間作爲紀元時間。簡單!
給出更多的上下文。這不是在SO上提問的方式。 – 2012-02-17 12:36:35
因此,你有一個文件列表,每個元素在數組中有一個文件/目錄條目@dir ...是的? 在描述開始處具有「d」的條目是目錄 時間戳也可作爲其中一個元素。 – SkryneSaver 2012-02-17 12:46:48