# Compare and update a backup directory. # # Usage: update [-acd] frompath topath # # Compare the frompath and topath directories looking for differences, # updating the topath directory as needed to make it an up-to-date # copy. # # Comparison is done based on timestamps, not contents for speed. By # default, only files that already exist in the 'topath' are updated. # Files that exist only in the 'frompath' are not copied. (This is # done on the assumption that the 'topath' is intended only to contain # a snapshot of the important files.) # # By default, an extra files in the 'topath' are not deleted. # # Options: # # -a All files. If a file or subdirectory exists only in the # frompath, copy it to the topath. # -c Compare only and report. # -d Delete any extra files in the topath. # -v Verbose. proc update(args) local j, frompath, topath, allfiles, compareonly, deleteextra, Verbose if ($#args < 2) then echo "Usage: update [-acdv] frompath topath" @ status = 1 return end while ($#args >= 3) if (substr(args[0], 1, 1) != '-') then echo "Usage: update [-acd] frompath topath" @ status = 1 return end for j = 2 to strlen(args[0]) do switch (substr(args[0], j, 1)) case 'a': @ allfiles = 1 break case 'c': @ compareonly = 1 break case 'd': @ deleteextra = 1 break case 'v': @ Verbose = 1 break case '-': break default: echo "Usage: update [-acd] frompath topath" @ status = 1 return end end shift args end @ frompath = fullpath(args[0]) @ topath = fullpath(args[1]) if (frompath =~ "*\") @ frompath = substr(frompath, 1, strlen(frompath) - 1) if (topath =~ "*\") @ topath = substr(topath, 1, strlen(topath) - 1) if (Verbose) echo Comparing $frompath and $topath if (-e $frompath && -e $topath && $#frompath == 1 && $#topath == 1) then if (Verbose) echo Paths exist, now comparing if (-D $frompath) then if (! -D $topath) then echo $topath must be a directory @ status = 1 return end if (!allfiles) then foreach j (`ls -1rD $frompath`) if (-e $topath\$j && `newer $frompath\$j $topath\$j`) then if (compareonly) then echo $topath\$j is out of date else if (Verbose) echo Updating $topath\$j cp $frompath\$j $topath\$j end end end else foreach j (`ls -1ra +D -. $frompath`) if (!-e $topath\$j) then if (compareonly) then echo $topath\$j does not exist else if (Verbose) echo Creating $topath\$j mkdir $topath\$j end end end foreach j (`ls -1rD $frompath`) if (-e $topath\$j) then if (`newer $frompath\$j $topath\$j`) then if (compareonly) then echo $topath\$j is out of date else if (Verbose) echo Updating $topath\$j cp $frompath\$j $topath\$j end end else if (compareonly) then echo $topath\$j does not exist else if (Verbose) echo Creating $topath\$j cp $frompath\$j $topath\$j end end end end if (deleteextra) then if (compareonly) then foreach j (`ls -1rD $topath`) if (!-e $frompath\$j) then echo $frompath\$j does not exist end end else foreach j (`ls -1rD $topath`) if (!-e $frompath\$j) then if (Verbose) echo Deleting $topath\$j rm $topath\$j end end end end else if (-D $topath) then echo $topath must be an ordinary file @ status = 1 return end if (compareonly) then echo $topath is out of date else if (Verbose) echo Updating $topath cp $frompath $topath end end else echo Either $frompath or $topath is not a valid pathname end end update $argv
Hamilton C shell |
Free Updates |
Free Demo Software |
Win32 Training
Y2K |
Customer Testimonials |
On-line Hamilton C shell User Guide
Home |
Email |
Support |
Company Profile |
Distributors |
Links
Copyright © 1997-2001 by Hamilton Laboratories.
All rights reserved.
You are visitor number
237.
This page was last modified November 3, 2001.