1

我正在使用 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 上

4

2 回答 2

2

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

于 2012-04-18T16:02:56.677 回答
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);
    }
}
于 2012-04-17T20:46:38.177 回答