[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 find.info-[12].
+ The find.texi -prune SCM example has been fixed, the find.1 -prune SCM
example
+ 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.
@smallexample
-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
time.
+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:
+
+@smallexample
+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:
.nf
\&
.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
\&
.fi
-Sample output:
+Sample directories:
.nf
\&
.in +4m
@@ -2513,6 +2514,16 @@ Sample output:
.B repo/project4/.git
.in
\&
+Sample output:
+.nf
+\&
+.in +4m
+.B repo/project1
+.B repo/gnu/project2
+.B repo/gnu/project3
+.B repo/project4
+.in
+\&
.fi
In this example,
.B \-prune
--
2.30.2
- [no subject], raf, 2022/11/25
- [PATCH] find: doc: Fix -prune SCM example/directories and make it more efficient,
raf <=