如何使用Net :: SSH2检查远程机器中是否存在目录

时间:2012-04-02 13:49:29

标签: perl

如何在这里......我需要检查指定路径上是否存在任何目录。例如 如果路径是/ root / home / 然后检查此路径上是否存在目录ABC。 如果没有这样的目录,我需要创建它,否则跳过创建。

我正在使用Net::SSH2。我可以使用Net::SSH2创建和保存文件,但我不知道如何使用远程服务器中的Net::SSH2检查目录和文件是否存在。

Net::SSH2

2 个答案:

答案 0 :(得分:1)

我假设您使用sftp方法创建Net::SSH2::SFTP对象?

无论目录是否存在,我要做的是调用Net::SSH2::SFTP->mkdir方法:尝试创建已存在的目录所涉及的开销很可能无关紧要。

但是,如果必须查找给定目录是否已就位,则可以使用Net::SSH2::SFTP->opendir方法,该方法仅在目录中返回有效的Net::SSH2::Dir对象存在。

答案 1 :(得分:1)

#!/usr/bin/perl

use strict;
use warnings;
use Net::SSH2;
use Net::SSH2::SFTP;
use Net::SSH2::File;

my $host     = 'sftp.somesite.com';
my $path     = "/root/home/ABC";
my $user     = "user";
my $password = "passwd";

my $ssh = Net::SSH2->new();

die "Can't Connect to $host" unless $ssh->connect($host);

if ($ssh->auth_password($user, $password))
{
   my $sftp = $ssh->sftp();
   $sftp->opendir($path) or $sftp->mkdir($path);
   my $error = $sftp->error;
   print "Error: $error\n" if (!$sftp->opendir($path));
}