File: backup.pl - Tab length: 1 2 4 8 - Lines: on off - No wrap: on off

#! /usr/bin/perl

use File::Copy;

my $from = "/var/local/backup/from/";
my $to = "/var/local/backup/to/";

opendir (H1, $from) || die ("error: cannot read input directory");
opendir (H2, $to) || die ("error: cannot read output directory");

my @files1 = readdir (H1);
my %files2 = map { $_ => 1 } readdir (H2);

closedir (H1);
closedir (H2);

foreach $file (@files1)
{
 if ($file != '.' && $file != '..')
 {
  my $i = 0;

  while ($files2{"$file.$i"})
  {
   $i = $i + 1;
  }

  if ($i == 0 || -s "$from/$file" != -s ("$to/$file." . ($i - 1)))
  {
   copy ("$from/$file", "$to/$file.$i");
   print "backup $file as $file.$i\n";
  }
 }
}