几个月前我开始在perl编程,这是我在stackoverflow.com上的第一个问题。我希望我能得到解决方案。
所以我想从ftp服务器复制一些文件。文件名采用以下格式:
abc_201149_cde_07_fgh_include_internal
在此示例中,数字部分每周更改一次,例如201149表示年= 2011年和周= 49.同样,07表示它是哪个版本。
我已将所有文件名复制到一个名为“sdk_link.txt”的文件中,我正在从中读取每个文件名,然后复制到我的本地PC:
use Net::FTP;
use File::Copy;
$Login = "<redacted>";
$Pwd = "<redacted>";
$ftpHost = "<redacted>";
$ftpFolder = "/daj/dhakj/ahdakl/abc_201206_def_05";
$ftp=Net::FTP->new($ftpHost,Timeout=>100);
if ($ftp)
{
print $ftp->message;
}
$ftp->login($Login,$Pwd);
print $ftp->message;
$ftp->cwd($ftpFolder);
print $ftp->message;
open FILE,"sdk_link.txt" or die $!;
while($test=<FILE>)
{
chomp($test);
#Copy the file
copy("$test","/testing");
}
$ftp->quit;
我想每周在Windows上运行此脚本。如何更改数字部分以便下载正确的文件?
答案 0 :(得分:1)
嗯,显而易见的答案是将模板保存在文件中,并插入正确的数字。例如:
echo abc_%s_cde_%s_fgh_include_internal |
perl -MPOSIX -nE 'say sprintf $_, strftime("%Y%U", localtime()), "07";'
输出:
abc_201207_cde_07_fgh_include_internal
因此,如果您有一个包含模板的文件,您可以使用%s
插入字符串,并根据您自己的参数列表提供参数,或者根据您的喜好动态提供参数。 E.g:
my $year = "2011";
my $week = "49";
my $ver = "07"; # Strings or numbers does not really matter
open my $fh, '<', "sdk_link.txt" or die $!;
while (<$fh>) {
my $file = sprintf $_, $year, $week, $ver;
copy($file, "/testing") or die "Copy failed for file $file: $!";
}
我不太确定File :: Copy :: copy是否适用于远程文件,但这是另一个问题。我相信Net::FTP :: get()可能就是你想要的。