One problem with find's time operators (-atime and its brethren) is that they don't allow very exact comparisons. They only allow you to specify time to within a day, and sometimes that's just not good enough. You think that your system was corrupted at roughly 4 p.m. yesterday (March 20); you want to find any files that were modified after that point, so you can inspect them. Obviously, you'd like something more precise than "give me all the files that were modified in the last 24 hours."
Some versions of touch , and other freely available commands like it, can create a file with an arbitrary timestamp. That is, you can use touch to make a file that's backdated to any point in the past (or, for that matter, postdated to some point in the future). This feature, combined with find's -newer operator, lets you make comparisons accurate to one minute or less.
For example, to create a file dated 4 p.m., March 20, give the command:
% touch -t 03201600 /tmp/4PMyesterday
Then to find the files created after this, give the command:
% find . -newer /tmp/4PMyesterday -print
What about "older" files? Older files are "not newer" files, and find has a convenient NOT operator (!) for just this purpose. So let's say that you want to find files that were created between 10:46 a.m. on July 3, 1999 and 9:37 p.m. on June 4, 2001. You could use the following commands:[38]
[38]Very old versions of find have trouble with using multiple -newer expressions in one command. If find doesn't find files that it should, try using multiple explicit -mtime expressions instead. They're not as precise, but they will work even on finds with buggy -newer handling.
% touch -t 199907031046 /tmp/file1 % touch -t 200106042137 /tmp/file2 % find . -newer /tmp/file1 \! -newer /tmp/file2 -print % rm /tmp/file[12]
-- ML
Copyright © 2003 O'Reilly & Associates. All rights reserved.