リンク: [ホーム] [自己紹介] [リンク集] [アルバム] [ソフトウェア] [発表文献] [その他]

まさおのChangeLogメモ / 2002-10-23

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2002-10-23 Wed

* backup.pl

senjimon 上でバックアップを取るスクリプト。

.slis.tsukuba.ac.jp になって rsh が効かなくなったので、ついでに
ssh を使うようにしたのも合わせて Perl で書いてみた。



#!/usr/bin/perl -w

use strict;

my $DIR = "/home/x/masao/Backup";
my $SSH_AGENT_ENV = "/tmp/.ssh-masao-agent.lnk";
my $RSYNC = "/usr/bin/rsync";
my @RSYNC_ARGS = ("-e", "/usr/bin/ssh", "-auqS", "--delete");

main();
sub main {
  my $from = $ARGV[0] || usage();

  my @path = split(/[:\/]/, $from);
  my $to = pop @path;

  unless (defined $to || -d "$DIR/$to") {
      print "mkdir \"$DIR/$to\"\n";
      mkdir("$DIR/$to", 0400) || die "mkdir error: $!";
  }

  unless (-x $RSYNC) {
      print "rsync command not executable: $RSYNC\n";
      exit;
  }

  load_sshenv();

  my @cmd = ($RSYNC, @RSYNC_ARGS, $from, "$DIR/$to");
  print "@cmd\n";
  system(@cmd);
}

sub usage() {
  print " USAGE: $0 target\n";
  print "\tplease specify target host or directory\n";
  exit;
}

sub load_sshenv() {
  open(F, $SSH_AGENT_ENV) || die "open error: $SSH_AGENT_ENV: $!";
  while (my $line = <F>) {
      if ($line =~ /^setenv\s+(\S+)\s+(\S+);$/) {
          $ENV{$1} = $2;
          print $line;
      }
  }
  close F;
}