我正在使用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);
}
}