bug-findutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Fwd: findutils-4.2.28 patch


From: James Youngman
Subject: Fwd: findutils-4.2.28 patch
Date: Tue, 10 Oct 2006 11:12:51 +0100

Oops.   A typo in the mailing list name...  Sorry.

---------- Forwarded message ----------
From: James Youngman <address@hidden>
Date: Oct 10, 2006 11:11 AM
Subject: Re: findutils-4.2.28 patch
To: Jeff Chua <address@hidden>
Cc: address@hidden


On 10/10/06, Jeff Chua <address@hidden> wrote:

James,

I've modified the find program to allow "find" to find a file that _has_
the same modification time as a file specified or newer.

Great.   It's best to send this sort of things to the bug-findutils
mailing list, so that everybody gets to see your idea and collaborate.
 I've CC'ed the list.

'-newer' only find files _newer_ than the file specified.

so '-new' will find files that has the _same_ time or newer.

I need this feature as system are running faster now, so when you touch a
file as a reference_file, then create new files, all the new files created
will have the same time stamp as the reference_file. Using '-newer' will
not return any file.

Yes.   This solves an important problem.    But the name of the test
is not very obvious, unfortunately.  As you already decided, changing
the behaviour of "-newer" is also not a great idea.

Perhaps it's more obvious to the user what's going on if we ntroduce a
new test, "-older"  which succeeds if the file being tested is older
than the named file.  Then for the use case you are talking about " !
-older foo" would do the job.  What do you think?

In any case, this reminds me that, as far as I recall, I still have
not enhanced find to take advantage of the nanosecond-reslution
timestamps that a number of operating systems and filesystems provide
these days (and which have in fact been available for years).

I suspect both features will be necessary since filesystems with very
low timestamp resolution (for example, two seconds for FAT) will be
around for a long time to come.

Thanks for your help!


Now, 'find . -new reference_file' will return all files created since
reference_file was created.

--- findutils-4.2.28/find/find.1        2006-04-01 05:55:04 +0800
+++ findutils-4.2.28/find/find.1.new    2006-10-10 14:52:13 +0800
@@ -112,7 +112,7 @@
  When the \-H or \-L options are in effect, any symbolic links listed
  as the argument of \-newer will be dereferenced, and the timestamp
  will be taken from the file to which the symbolic link points.  The
-same consideration applies to \-anewer and \-cnewer.
+same consideration applies to \-new, \-anewer and \-cnewer.

  The \-follow option has a similar effect to \-L, though it takes
  effect at the point where it appears (that is, if \-L is not used but
@@ -152,7 +152,7 @@
  been specified, the position of the \-follow option changes the
  behaviour of the \-newer predicate; any files listed as the argument
  of \-newer will be dereferenced if they are symbolic links.  The same
-consideration applies to \-anewer and \-cnewer.  Similarly, the \-type
+consideration applies to \-new, \-anewer and \-cnewer.  Similarly, the \-type
  predicate will always match against the type of the file that a
  symbolic link points to rather than the link itself.  Using \-follow
  causes the \-lname and \-ilname predicates always to return false.
@@ -331,6 +331,10 @@
  in order to protect it from expansion by the shell.

+.IP "\-new \fIfile\fR"
+File was modified more recently or same as \fIfile\fR.  If \fIfile\fR is a
+symbolic link and the \-H option or the \-L option is in effect, the
+modification time of the file it points to is always used.
  .IP "\-newer \fIfile\fR"
  File was modified more recently than \fIfile\fR.  If \fIfile\fR is a
  symbolic link and the \-H option or the \-L option is in effect, the
  modification time of the file it points to is always used.
@@ -945,6 +949,9 @@
  Supported.   Interpretation of the response is not locale-dependent
  (see ENVIRONMENT VARIABLES).

+.IP "\-new"
+Supported. See \-newer.
+
  .IP "\-newer"
  Supported.  If the file specified is a symbolic link, it is always
  dereferenced.  This is a change from previous behaviour, which used to
--- findutils-4.2.28/find/parser.c      2006-08-05 21:16:16 +0800
+++ findutils-4.2.28/find/parser.c.new  2006-10-10 14:47:33 +0800
@@ -118,6 +118,7 @@
  static boolean parse_name          PARAMS((const struct parser_table*, char 
*argv[], int *arg_ptr));
  static boolean parse_negate        PARAMS((const struct parser_table*, char 
*argv[], int *arg_ptr));
  static boolean parse_newer         PARAMS((const struct parser_table*, char 
*argv[], int *arg_ptr));
+static boolean parse_new           PARAMS((const struct parser_table*, char 
*argv[], int *arg_ptr));
  static boolean parse_noleaf        PARAMS((const struct parser_table*, char 
*argv[], int *arg_ptr));
  static boolean parse_nogroup       PARAMS((const struct parser_table*, char 
*argv[], int *arg_ptr));
  static boolean parse_nouser        PARAMS((const struct parser_table*, char 
*argv[], int *arg_ptr));
@@ -249,6 +250,7 @@
  #ifdef UNIMPLEMENTED_UNIX
    PARSE(ARG_UNIMPLEMENTED, "ncpio",          ncpio),      /* Unix */
  #endif
+  PARSE_TEST       ("new",                   new),
    PARSE_TEST       ("newer",                 newer),
    PARSE_OPTION     ("noleaf",                noleaf),      /* GNU */
    PARSE_TEST       ("nogroup",               nogroup),
@@ -796,7 +798,7 @@
  tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n\
        -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n\
        -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex 
PATTERN\n\
-      -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE"));
+      -links N -lname PATTERN -mmin N -mtime N -name PATTERN -new FILE -newer 
FILE"));
    puts (_("\
        -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN\n\
        -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N\n\
@@ -1065,6 +1067,25 @@
  }

  static boolean
+parse_new (const struct parser_table* entry, char **argv, int *arg_ptr)
+{
+  struct predicate *our_pred;
+  struct stat stat_new;
+
+  (void) argv;
+  (void) arg_ptr;
+
+  if ((argv == NULL) || (argv[*arg_ptr] == NULL))
+    return false;
+  if ((*options.xstat) (argv[*arg_ptr], &stat_new))
+    error (1, errno, "%s", argv[*arg_ptr]);
+  our_pred = insert_primary (entry);
+  our_pred->args.time = stat_new.st_mtime;
+  (*arg_ptr)++;
+  return true;
+}
+
+static boolean
  parse_newer (const struct parser_table* entry, char **argv, int *arg_ptr)
  {
    struct predicate *our_pred;
--- findutils-4.2.28/find/pred.c        2006-04-01 05:55:04 +0800
+++ findutils-4.2.28/find/pred.c.new    2006-10-10 14:48:48 +0800
@@ -194,6 +194,7 @@
    {pred_mtime, "mtime   "},
    {pred_name, "name    "},
    {pred_negate, "not     "},
+  {pred_new, "new   "},
    {pred_newer, "newer   "},
    {pred_nogroup, "nogroup "},
    {pred_nouser, "nouser  "},
@@ -1109,6 +1110,16 @@
  }

  boolean
+pred_new (char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)
+{
+  (void) pathname;
+
+  if (stat_buf->st_mtime >= pred_ptr->args.time)
+    return (true);
+  return (false);
+}
+
+boolean
  pred_newer (char *pathname, struct stat *stat_buf, struct predicate *pred_ptr)
  {
    (void) pathname;
--- findutils-4.2.28/find/defs.h        2006-06-15 05:42:48 +0800
+++ findutils-4.2.28/find/defs.h.new    2006-10-10 14:49:26 +0800
@@ -459,6 +459,7 @@
  boolean pred_mtime PARAMS((char *pathname, struct stat *stat_buf, struct 
predicate *pred_ptr));
  boolean pred_name PARAMS((char *pathname, struct stat *stat_buf, struct 
predicate *pred_ptr));
  boolean pred_negate PARAMS((char *pathname, struct stat *stat_buf, struct 
predicate *pred_ptr));
+boolean pred_new PARAMS((char *pathname, struct stat *stat_buf, struct 
predicate *pred_ptr));
  boolean pred_newer PARAMS((char *pathname, struct stat *stat_buf, struct 
predicate *pred_ptr));
  boolean pred_nogroup PARAMS((char *pathname, struct stat *stat_buf, struct 
predicate *pred_ptr));
  boolean pred_nouser PARAMS((char *pathname, struct stat *stat_buf, struct 
predicate *pred_ptr));
--- findutils-4.2.28/ChangeLog  2006-04-01 05:55:04 +0800
+++ findutils-4.2.28/ChangeLog.new      2006-10-10 15:01:41 +0800
@@ -1,3 +1,9 @@
+2006-10-10  Jeff Chua <address@hidden>
+
+       * find/find.1, find/parser.c, find/pred.c, find/defs.h:
+       Added '-new'. '-newer' only finds newer files. '-new' finds
+       files that were modified more recently or same as the file specified.
+
  2005-12-10  Andreas Metzler <address@hidden>

        * find/defs.h, find/parser.c: fixed compilation warning caused by


Thanks,
Jeff
[ address@hidden ]





reply via email to

[Prev in Thread] Current Thread [Next in Thread]