我的文件格式类似于“IDY03101.200901110500.axf”。我有大约25个类似的文件驻留在ftp存储库中,并且只想为当前日期下载所有这些类似的文件。我使用了以下代码,该代码无效,并且认为正则表达式不正确。
my @ymb_date = "IDY.*\.$year$mon$mday????\.axf"; foreach my $file ( @ymb_date) { print STDOUT "Getting file: $file\n"; $ftp->get($file) or warn $ftp->message; }
任何帮助表示感谢。
编辑:
我需要所有当前日期文件。
使用ls -lt | grep "Jan 13"
在UNIX框中工作,但在脚本中不工作
在这种情况下,什么可能是vaild正则表达式?
答案 0 :(得分:3)
看起来你并没有使用任何正则表达式。您正在尝试使用文字模式作为文件名进行下载。
也许你想使用Net::FTP的ls
方法来获取文件列表然后过滤它们。
foreach my $file ( $ftp->ls ) {
next unless $file =~ m/$regex/;
$ftp->get($file);
}
您可能也喜欢在Perlmonks上为"Net::FTP"实施mget
的答案。
另外,我认为您希望在日期之后找到四位数的正则表达式。在Perl中,您可以将其写为\d{4}
。 ?
是Perl中的量词,因此连续四个不起作用。
IDY.*\.$year$mon$mday\d{4}\.axf
答案 1 :(得分:1)
我不认为正则表达式是这样的。虽然我做了Perl已经有一段时间了,所以我可以离开那里。 :)
您的$ftp
对象是否可以访问mget()
方法?如果是这样,也许试试这个?
$ftp->mget("IDY*.$year$mon$mday*.axf") or warn $ftp->message;