私の@dir = $ ftp-> ls()で私はすべてのディレクトリのリストを得ることができますが、魔法のものは最新のものです。私はWindows OSを使用していて、そのFTPはFTPからのものです。WindowsのPerlで最後に変更されたftpディレクトリを取得するにはどうすればよいですか?
Thnaks
私の@dir = $ ftp-> ls()で私はすべてのディレクトリのリストを得ることができますが、魔法のものは最新のものです。私はWindows OSを使用していて、そのFTPはFTPからのものです。WindowsのPerlで最後に変更されたftpディレクトリを取得するにはどうすればよいですか?
Thnaks
あなたの不用意表現の質問のためのqucikと汚いハック取得します:
まず:あなたはネットを使用していると仮定すると、
を:: FTP
あなたが呼び出す必要があります
$ftp->dir()
ない
$ftp->ls()
長いディレクトリのリストを取得する。その後
この試してみてください。
drwxr-xr-x 36 root root 4096 Nov 29 09:14 home
コード:これは、この形式
drwxr-xr-x 17 root other 4096 Apr 12 2010 software
ではなく、この(年間行方不明のノート)でのみ、ディレクトリのために動作します
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];
を次のようなシンボリックリンクも無視します:
lrwxrwxrwx 1 root root 8 May 30 2011 i -> incoming
しかし、それはあなたに始まります。
map{} sort{} map {} @array;
構造
は「シュワルツ変換」と呼ばれ、ほとんどの作業を行います。$ ftp-> dirによって返される文字列は、アクセスしているFTPサーバーのタイプによって異なる場合があります。 OSとユーザの設定は文字列のフォーマットにも影響するので、この文字列を解析することは簡単な解決策であるとはいえ問題につながる可能性があります。 $ ftp-> mdtm($ file)を使用するほうがはるかに簡単です。最後の変更日時がエポック時間として返されます。シンプル!
さらに詳しい情報を入力してください。これは質問がSOで尋ねられる方法ではありません。 –
だから、配列@dirの要素ごとに1つのファイル/ディレクトリエントリを持つファイルリストがあります...はい? 説明の先頭に "d"を持つエントリはディレクトリです タイムスタンプは要素の1つとしても使用できます。 – SkryneSaver