Perl SFTP 使用 Net::SFTP::Foreign 的问题



我正在使用Net::FTP::Foreign 并且不断收到有关找不到文件的错误,我不确定我的语法是否错误或我误解了如何使用它。

$LOGFILE = 'data_log' . $YYYYMMDD . '.log';
$sftp->setcwd('/tmp') 
    or die 'Unable to change working directory to /tmp: ' . $sftp->error;
print "CWD setn";
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上

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

你有:

$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 directoryn);
    # 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);
    }
}

最新更新