30 lines
774 B
Plaintext
30 lines
774 B
Plaintext
|
#!/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);
|