Perl SFTP使用Net :: SFTP :: Foreign发布

时间:2012-04-17 16:53:29

标签: perl

我正在使用Net :: FTP :: Foreign,我一直收到有关文件未找到的错误,我不确定我的语法是错误的还是我误解了如何使用它。

$LOGFILE = 'data_log' . $YYYYMMDD . '.log';

$sftp->setcwd('/tmp') 
    or die 'Unable to change working directory to /tmp: ' . $sftp->error;
print "CWD set\n";
my $ls = $sftp->ls('/tmp', names_only => 1, ordered => 1);

foreach my $file (@$ls) {
    print $file . "\n";
}

print 'Getting file: ' . $LOGFILE . "\n";
$sftp->get('/tmp/data_log*', 'data_log' . $YYYYMMDD . 'log') 
        or die 'Could not get remote file: ' . $sftp->error;

我得到的错误是远程端没有这样的文件,但我确认当我执行LS cmd时它们确实存在。

我的脚本是否有任何明显错误导致它无法正常工作?

我也在使用Net :: SFTP :: Foreign,因为Net :: SFTP不会在运行10.7的MBP上构建

2 个答案:

答案 0 :(得分:2)

而不是get使用mget来传输与给定模式匹配的所有文件。

答案 1 :(得分:1)

你有:

$sftp->get('/tmp/data_log*', 'data_log' . $YYYYMMDD . 'log') 

是否有名为/tmp/data_log*的文件?或者,您是否希望获得以/tmp开头的data_log中的所有文件?

您只能使用get方法一次获取一个文件。全球不起作用。为什么不将get移到foreach循环中?当你看到你想要的文件时,抓住它。

foreach my $file ( @{$ls} ) {
    print qq(Found file "$file" in directory\n);

    # Is this the file we want to fetch?

    if ( $file eq $LOGFILE ) {
          print qq(Attempting to fetch "$file"\n);
          $sftp->get( "$LOGFILE" )   #I think you're only interested in this file
              or die qq(Could not fetch file "$LOGFILE" from directory: ) . $sftp->error;
          print qq(Fetched file "$file"\n);
    }
}