我正在使用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上构建
答案 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);
}
}