当前位置: 首页 > 知识库问答 >
问题:

使用net::SFTP::foreign的Perl SFTP问题

益源
2023-03-14

我使用的是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上

共有1个答案

岳允晨
2023-03-14

您有:

$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);
    }
}
 类似资料:
  • 我的本地计算机上有一个文件。我有一个Perl脚本可以通过SFTP连接将此文件复制到远程位置()。

  • 我是个初学者。我编写了一个perl脚本,该脚本执行以下操作 -在当前日期之前在“/X01/ABCD/ABC_LOGS/ABCD_LOGS”下创建目录,如果尚未创建,则以“YYYYMMDD”的格式创建。即:如果脚本在“2013年1月1日”运行,则在该路径下创建目录“20130101”。因此,每当需要检查日志时,总是查找当前日期之前的目录。 我有一个困难的时间,想出一个解决方案,打印一个消息时,没有文

  • 在调用时,连接不会关闭,Perl脚本处于挂起状态,直到我手动终止进程。 下面是我在nohup.out文件中得到的错误。

  • 在此之后,程序被终止,并出现上述错误。

  • 我正在通过perl脚本使用net::SFTP::foreign模块连接到SFTP服务器,示例命令如下: net::sftp::foreign->new($host,端口=>'22',后端=>'NET_SSH2') null

  • 我有一个用例,用户将多个csv文件放到远程目录中,然后放置ready.txt来指示文件已准备好使用。当我们的applcation在远程目录中看到ready.txt文件时,它应该开始使用sftp文件入站通道适配器将所有文件复制到本地目录,包括ready.txt。是否有办法确保readt.txt文件是最后一个要复制到本地目录的文件? 因为当文件从远程目录复制到本地目录时,我有另一个文件入站通道适配器在