G-chan Square

じーちゃん/へたっぴの綴る、日々のつれづれとか。
twitterのまとめとゲームネタが中心。2015年からロードバイク/ミニベロ始めました。

[perl] remote diff (rdiff)

超絶久しぶりの技術ネタ。
そして、単なる備忘録だったりw
リモートサーバとのファイルのdiffを取るためのperlスクリプト。
$ diff <(ssh host1 cat file1) <(ssh host2 cat file2)
とか毎回書くの大変なので、面倒くさいところをperlさんでラッピングしたもの。

仕事場では愛用しているんだけど、この間サーバが死んだ時に一緒にお亡くなりになってしまったようなので、再作成&備忘録作成。
#!/usr/bin/perl
use strict;
use warnings;
$| = 1;
my $file1 = getFile($ARGV[$#ARGV - 1]);
my $file2 = getFile($ARGV[$#ARGV]);
my $diff_opt = '';
if (scalar(@ARGV) < 2) {
  die "usage: rdiff [diff OPTION] FILE1 FILE2 \n";
}
if (scalar(@ARGV) > 2) {
  $diff_opt = join(' ', @ARGV[0 .. $#ARGV - 2]);
}
my $command = "/bin/bash -c \"/usr/bin/diff $diff_opt $file1 $file2\" ";
print STDOUT "$command \n";
my $ret = `$command`;
print STDOUT $ret;
sub getFile {
  my $file = shift;
  if ($file =~ m|((\w+)\@)?(\w+):(/.+)|) {
    my $user = $1;
    my $host = $3;
    my $remote_file = $4;
    if ($user) {
      $host = "$user\@$host";
    }
    $file = "<(/usr/bin/ssh $host '/bin/cat $remote_file')";
  }
  return $file;
}

コメントする