Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl脚本中的ssh_Perl_File_Ssh_Return - Fatal编程技术网

perl脚本中的ssh

perl脚本中的ssh,perl,file,ssh,return,Perl,File,Ssh,Return,我是perl新手。我有一个带有管道分隔线的输入文件,其中包含服务器名称,文件名作为字段。文件名在输入提要文件中具有通配符(*)。 实际文件名将以时间戳作为后缀 Ex: Actual files in remote servers server_1/abc_20110801.txt server_1/abc_20110802.txt server_1/abc_20110803.txt server_2/xyz_20110801.dat server_2/xyz_20110802.dat Ex

我是perl新手。我有一个带有管道分隔线的输入文件,其中包含服务器名称,文件名作为字段。文件名在输入提要文件中具有通配符(*)。 实际文件名将以时间戳作为后缀

Ex: Actual files in remote servers
server_1/abc_20110801.txt
server_1/abc_20110802.txt
server_1/abc_20110803.txt
server_2/xyz_20110801.dat
server_2/xyz_20110802.dat



Ex: Input feed file
server_1|abc_*.txt
server_2|xyz_*.dat
我正在尝试通过ssh连接到远程服务器,读取文件并捕获“最新”文件的时间戳(在本例中为server_1/abc_20110803.txt和server_2/xyz_20110802.dat)。 所有远程服务器的ssh密钥都已经设置好,因此我们不需要传递用户id和密码

如果文件存在于同一服务器中,我可以使用以下方法执行此操作:

my @list_files = map { chomp; $_ } (`ls -t $wild_f_nme`);
my $f_nme=$list_files[0];
my ($accesstime, $modtime, $createtime, $fsize) = (stat($f_nme))[8,9,10,7];
如何检查远程服务器中文件的时间戳。我需要为每个服务器启动ssh连接

仅供参考-我无法安装任何模块(如Net::OpenSSH)。 我们可以用类似的方法来实现这一点吗

my @list_files = map { chomp; $_ } (`qx/ssh $serv_nme ls -t $d_loc/$wild_f_nme`);

您可以通过以下方法使文件名更加平滑:

您可以使用正则表达式提取日期中的数字,例如

my ($date) = $files[0] =~ /(\d{8})/;

我将使用日期模块来查找最近的日期。比如

看看
GRID::Machine
。它允许您在远程机器上执行perl代码并返回perl数据结构

类似的方法应该可以工作(未经测试):


谢谢你的回复。但我的主要挑战是通过ssh连接到远程服务器并捕获文件修改时间戳。你问我怎么能检查时间戳,我很困惑。如果不能使用模块,那么在perl中使用ssh将很困难。假设您的系统上有ssh,您可以执行ssh命令来执行一些perl代码。看见
my ($date) = $files[0] =~ /(\d{8})/;
use GRID::Machine;

my $machine = GRID::Machine->new(host => $host);

my $r = $machine->sub( 
  get_files=> q{
    my $pattern = shift;
    my @files = glob($pattern);
    # now stat each file name
    my %stats;
    for my $path (@files) {
      $stats{$path} = [ stat($path) ]
    }
    return \%stats;
  };
);

die $r->errmsg unless $r->ok;

$r = $machine->get_file_info($pattern);
my $stats = $r->Result;

# $stats is an array of hashes indexed by file name.

# $stats->{$path}->[7] is the file length of $path on the remote machine