加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 生成动态文件名列表

发布时间:2020-12-16 06:12:54 所属栏目:大数据 来源:网络整理
导读:几个月前我开始在perl编程,这是我在stackoverflow.com上的第一个问题.我希望我能得到解决方案. 所以我想从ftp服务器复制一些文件.文件名采用以下格式: abc_201149_cde_07_fgh_include_internal 在此示例中,数字部分每周更改,例如201149表示年= 2011年和周=
几个月前我开始在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上运行这个脚本.如何更改数字部分以便下载正确的文件?

解决方法

嗯,显而易见的答案是将模板保存在文件中,并插入正确的数字.例如:

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插入字符串,并根据您自己的参数列表提供参数,或者根据您的喜好动态提供参数.例如.:

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()可能就是你想要的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读