chet@cwns1.CWRU.EDU (Chet Ramey) (07/26/90)
Archive-name: newer/25-Jul-90 Original-posting-by: chet@cwns1.CWRU.EDU (Chet Ramey) Original-subject: Re: how to compare file modification time in bourne shell script Reposted-by: emv@math.lsa.umich.edu (Edward Vielmetti) [Reposted from comp.unix.questions. Comments on this service to emv@math.lsa.umich.edu (Edward Vielmetti).] In article <1990Jul23.233044.2729@silma.com> aab@silma.UUCP () writes: >newer file1 file2 >that returns 0 if file1 is newer than file2 else returns 1 Here's something I picked up a while back... /* * From Henry Spencer * * > There doesn't appear to be any decent way to compare the last modified * > times of files from the shell... * * Before everybody starts inventing their own names for this, it should be * noted that V8 already has a program for this, newer(1). It takes two * filenames as arguments, and exits with status 0 if and only if either * (a) the first exists and the second does not, or (b) both exist and the * first's modification time is at least as recent as the second's. Other- * wise it exits with non-zero status. (The preceding two sentences are * essentially the whole of the manual page for it.) * * Relatively few people have V8, but in the absence of any other precedent * for what this facility should like look, it seems reasonable to follow * V8's lead. * * Here is an independent rewrite, done from the manual page and not the * code, by me, hereby placed in the public domain: */ /* * newer - is first file newer than second? * * newer file1 file2 * * exit with 0 status if file1 exists and file2 does not, or if file1's last * modified time is at least as recent as file2's. */ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> main(argc, argv) int argc; char *argv[]; { struct stat file1; struct stat file2; if (argc != 3) { fprintf(stderr, "Usage: %s file1 file2\n", argv[0]); exit(2); } if (stat(argv[1], &file1) < 0) exit(1); if (stat(argv[2], &file2) < 0) exit(0); if (file1.st_mtime >= file2.st_mtime) exit(0); exit(1); } -- Chet Ramey ``See Figure 1.'' Network Services Group Case Western Reserve University chet@ins.CWRU.Edu