[Top][All Lists]

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

[PATCH] find: doc: Fix -prune SCM example/directories and make it more e

From: raf
Subject: [PATCH] find: doc: Fix -prune SCM example/directories and make it more efficient
Date: Sat, 26 Nov 2022 10:36:21 +1100

* find/find.1 - Fix -prune SCM example directories and make it more efficient
* doc/find.texi - Fix -prune SCM example and make it more efficient (two ways)
* NEWS - Describe the above
 NEWS          |  3 +++
 doc/find.texi | 27 ++++++++++++++++++++++-----
 find/find.1   | 15 +++++++++++++--
 3 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/NEWS b/NEWS
index 1fff34f8..fa73d675 100644
--- a/NEWS
+++ b/NEWS
@@ -18,6 +18,9 @@ GNU findutils NEWS - User visible changes.      -*- outline 
-*- (allout)
   When generating the Texinfo manual, `makeinfo` is invoked with the --no-split
   option for all output formats now; this avoids files like[12].
+  The find.texi -prune SCM example has been fixed, the find.1 -prune SCM 
+  directories/output have been fixed, and the example itself has been made more
+  efficient (both files). [#62259] Also, a typo in find.texi has been fixed.
 * Noteworthy changes in release 4.9.0 (2022-02-22) [stable]
diff --git a/doc/find.texi b/doc/find.texi
index 379fe646..fec89d3a 100644
--- a/doc/find.texi
+++ b/doc/find.texi
@@ -5137,14 +5137,16 @@ searching subdirectories inside projects whose SCM 
directory we
 already found.
-find repo/ \
--exec test -d @{@}/.svn \; -or \
--exec test -d @{@}/.git \; -or \
--exec test -d @{@}/CVS \; -print -prune
+find -L repo/ \
+-type d \
+\( -exec test -d @{@}/.svn \; \
+-or -exec test -d @{@}/.git \; \
+-or -exec test -d @{@}/CVS \; \
+\) -print -prune
 @end smallexample
 In this example, @command{test} is used to tell if we are currently
-examining a directory which appears to the a project's root directory
+examining a directory which appears to be a project's root directory
 (because it has an SCM subdirectory).  When we find a project root,
 there is no need to search inside it, and @code{-prune} makes sure
 that we descend no further.
@@ -5153,6 +5155,21 @@ For large, complex trees like the Linux kernel, this 
will prevent
 searching a large portion of the structure, saving a good deal of
+The @samp{-type d} clause causes the three @samp{test} shell
+processes to only be executed for directories. This can be made even
+more efficient by combining the three @samp{test} shell processes
+into a single process:
+find -L repo/ \
+-type d \
+-exec sh -c 'test -d "$1"/.svn || test -d "$1"/.git || test -d "$1"/CVS' . {} 
\; \
+-print -prune
+@end smallexample
+Note that the @samp{.} argument is just a placeholder for the unused
+@samp{$0} shell positional parameter in the @samp{sh -c} command. The
+@samp{@{@}} argument is the @samp{$1} shell positional parameter.
 @node Security Considerations
 @chapter Security Considerations
diff --git a/find/find.1 b/find/find.1
index 429aa2f0..aa330c95 100644
--- a/find/find.1
+++ b/find/find.1
@@ -2492,8 +2492,9 @@ projects' roots:
 .in +4m
-.B $ find repo/ \e
+.B $ find -L repo/ \e
 .in +4m
+.B \-type d \e
 .B \e( \-exec test \-d \(aq{}/.svn\(aq \e; \e
 .B \-or \-exec test \-d \(aq{}/.git\(aq \e; \e
 .B \-or \-exec test \-d \(aq{}/CVS\(aq \e; \e
@@ -2502,7 +2503,7 @@ projects' roots:
 .in -4m
-Sample output:
+Sample directories:
 .in +4m
@@ -2513,6 +2514,16 @@ Sample output:
 .B repo/project4/.git
+Sample output:
+\& +4m
+.B repo/project1
+.B repo/gnu/project2
+.B repo/gnu/project3
+.B repo/project4
 In this example,
 .B \-prune

reply via email to

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