私の要件は、ファイルとフォルダーを SFTP リモートの場所から UNIX の場所に転送することです。私は perl とシェル スクリプトを初めて使用するので、非常に混乱しています。以下に示すように、sftp 外部から rget コマンドを使用してみました。しかし、それは機能せず、転送されません。ファイルとフォルダーを sftp サーバーからコピーした後、それらを削除するにはどうすればよいですか?
use Net::SFTP::Foreign;
my $host = "sftp.elsevier.com";
my $remote_dir = "sample/host";
my $localdir = "sample/local";
my $username = "username";
my $password = "password";
my $debug = 0;
$sftp = Net::SFTP::Foreign->new($host, timeout => 240,user => $username, password => $password) or $newerr = 1;
push @ERRORS, "Can't sftp to $host: $!\n" if $newerr;
myerr() if $newerr;
print "Connected to $host\n";
$sftp->rget($remote_dir, $localdir) or $newerr = 1;
push @ERRORS, "Cant tranfer\n" if $newerr;
myerr() if $newerr;
$sftp->disconnect if $newerr;
print "Files are transferred successfully\n";
#Deleting files
$sftp->setcwd($remote_dir) or $newerr = 1;
push @ERRORS, "Can't cd $!\n" if $newerr;
myerr() if $newerr;
$sftp->disconnect if $newerr;
my $files = $sftp->ls or $newerr = 1;
push @ERRORS, "Can't get file list $!\n" if $newerr;
myerr() if $newerr;
foreach (@$files){
$sftp->remove($_) or $newerr = 1;
push @ERRORS, "Cant delete\n" if $newerr;
myerr() if $newerr;
print "Deleted files successfully\n";
#}
$sftp->disconnect;
sub myerr {
print "Error: \n";
print @ERRORS;
exit 0;
}
SFTP の場所 (サンプル/ホスト) 内には、ローカルの UNIX サーバー (サンプル/ローカル) にコピーし、リモートの場所から削除する必要がある多くのフォルダーとファイルがあります。