NetBSD/dist/am-utils/m4/copy-if-newbig

30 lines
774 B
Perl
Executable File

#!/usr/bin/perl -w
# copy a file if it is both newer and bigger in size
# if copying, first rename older file to .orig
$src = $ARGV[0];
$dst = $ARGV[1];
# dev,ino,mode,nlink,uid,gid,rdev,size,atime,mtime,ctime,blksize,blocks
@srcstat = stat($src);
@dststat = stat($dst);
$srcsize = $srcstat[7];
$srcmtime = $srcstat[9];
$dstsize = $dststat[7];
$dstmtime = $dststat[9];
# copy if src file is bigger and newer
if ($srcsize > $dstsize && $srcmtime > $dstmtime) {
print "mv -f $dst $dst.orig\n";
system("mv -f $dst $dst.orig");
print "cp -p $src $dst\n";
system("cp -p $src $dst");
die "cp command failed" if ($? != 0);
}
# make sure dst file has newer timestamp
if ($srcmtime > $dstmtime) {
print "touch $dst\n";
system("touch $dst");
}
exit(0);