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メソッドで一度に取得できるファイルは 1 つだけです。グロブは機能しません。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 に答える