#!/usr/bin/perl -w use strict; use integer; my $command = ''; my %local = (); my %remote = (); my @sums = (); my @transfer = (); if ( -f '/home/cip/adm/sithglan/bin/envup.server' || -f "$ENV{HOME}/bin/envup.server" ) { die "NEVER EVER RUN THIS IN THE CIP POOL: YOU SUCK :-)"; exit; # way to secureredundant } # [remote] ------------------------------------------ @sums = `ssh 131.188.30.105 bin/envup.server`; foreach $_ (@sums) { chomp; if (/(^[a-f0-9]{32})[ ]{2}([^\s]+)$/) { $remote{$2} = $1; # print "$1 -> $2\n"; } else { print "remote: can't match: <$_>\n"; } } # [local] ------------------------------------------ $command = 'md5sum ' . join(' ', keys(%remote)); @sums = qx($command 2> /dev/null); foreach $_ (@sums) { chomp; if (/(^[a-f0-9]{32})[ ]{2}([^\s]+)$/) { $local{$2} = $1; #print "$1 -> $2\n"; } else { print "local can't match: <$_>\n"; } } foreach my $file (keys(%remote)) { if (exists($local{$file})) { if ($remote{$file} ne $local{$file}) { push(@transfer, $file); } } else { push(@transfer, $file); } } if (@transfer) { $command = "ssh 131.188.30.105 -- tar cf - " . join(' ', @transfer) . " | tar xf -"; system($command); }