1 #!/usr/bin/perl -w 2 # copy a file if it is both newer and bigger in size 3 # if copying, first rename older file to .orig 4 5 $src = $ARGV[0]; 6 $dst = $ARGV[1]; 7 # dev,ino,mode,nlink,uid,gid,rdev,size,atime,mtime,ctime,blksize,blocks 8 @srcstat = stat($src); 9 @dststat = stat($dst); 10 11 $srcsize = $srcstat[7]; 12 $srcmtime = $srcstat[9]; 13 $dstsize = $dststat[7]; 14 $dstmtime = $dststat[9]; 15 16 # copy if src file is bigger and newer 17 if ($srcsize > $dstsize && $srcmtime > $dstmtime) { 18 print "mv -f $dst $dst.orig\n"; 19 system("mv -f $dst $dst.orig"); 20 print "cp -p $src $dst\n"; 21 system("cp -p $src $dst"); 22 die "cp command failed" if ($? != 0); 23 } 24 # make sure dst file has newer timestamp 25 if ($srcmtime > $dstmtime) { 26 print "touch $dst\n"; 27 system("touch $dst"); 28 } 29 exit(0); 30