summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2023-11-04 20:45:11 +0100
committerAlejandro Colomar <alx@kernel.org>2023-11-05 03:13:44 +0100
commit8b047e331466cc2ccdc0216b44820ee244a5387c (patch)
treeacd0e383c0d51f65c1c5a80cc6a048fc8ae5c6dc
parent518f28157358862ddda3bc94e546447b81e8936f (diff)
bin/grepc, grepc.1: Always enable recursive mode; remove -r
The non-recursive behavior is so slow that it's quite useless. It is only useful when reading from standard input, but for several files it's useless. Make '-r' the default when any files are specified, and remove the flag (since now it's always enabled). This happens to bring back a behavior close to what we had before 55dd5d7255c8 ("Don't find files recursively"). Non-seekable files can still be read, if redirected to standard input. Update the example from the manual page to reflect current usage. Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rwxr-xr-xbin/grepc10
-rw-r--r--share/man/man1/grepc.123
2 files changed, 15 insertions, 18 deletions
diff --git a/bin/grepc b/bin/grepc
index 6d05b25..46919fa 100755
--- a/bin/grepc
+++ b/bin/grepc
@@ -5,7 +5,6 @@
iflag='';
lflag='';
kflag='no';
-rflag='no';
tflag='no';
t_e='no';
t_fp='no';
@@ -39,7 +38,7 @@ grepc_err()
grepc_parse_cmd()
{
- while getopts "chiklrt:" opt; do
+ while getopts "chiklt:" opt; do
case "$opt" in
c)
cflag='yes';
@@ -58,9 +57,6 @@ grepc_parse_cmd()
lflag='l';
kflag='yes';
;;
- r)
- rflag='yes';
- ;;
t)
case "$OPTARG" in
e)
@@ -238,8 +234,8 @@ grepc_search()
grepc_patterns "$identifier" >"$p";
- if test "$rflag" = 'no'; then
- pcre2grep -${iflag}${lflag}HMn -f "$p" $files;
+ if test -z "$files"; then
+ pcre2grep -${iflag}${lflag}HMn -f "$p";
else
find $files -type f \
| xargs grep -${iflag}lPI -- "$identifier" \
diff --git a/share/man/man1/grepc.1 b/share/man/man1/grepc.1
index eb79522..176aaa6 100644
--- a/share/man/man1/grepc.1
+++ b/share/man/man1/grepc.1
@@ -21,8 +21,11 @@ and word boundaries are implicitly added to it in most cases.
If no
.I file
is given,
-nonrecursive searches read standard input,
-and recursive searches examine the working directory.
+this program reads standard input.
+Otherwise,
+it reads all files specified,
+and searches under any specified directories, recursively,
+without following symbolic links.
.SS Types of code
This program can search for several types of code.
The following arguments can be passed to the
@@ -144,14 +147,6 @@ instead print the name of each input file
from which output would normally have been printed.
Each file is only printed once.
.TP
-.B \-r
-Recursive search.
-If an input file is a directory,
-read all files under such directory, recursively,
-without following symbolic links.
-This is useful even if specific files are specified in the command line
-as it enables certain optimizations that cannot be enabled in filter mode.
-.TP
.BI \-t " type"
Restrict the search to a specific
.I type
@@ -161,15 +156,21 @@ to search for various types of code.
Default:
.BR "e f m t" .
.SH CAVEATS
+.SS Crashes
In some cases,
internal calls to
.MR pcre2grep 1
may fail after consuming too much resources.
To solve that,
restrict the "types of code" of your search.
+.SS Seekable files
+Files specified in the command line
+must be seekable and able to be opened twice.
+If you need to read a non-seekable file,
+redirect it to the standard input.
.SH EXAMPLES
.EX
-.RB \(ti/src/nginx/unit$ " grepc nxt_sprintf;"
+.RB \(ti/src/nginx/unit$ " grepc nxt_sprintf .;"
\&
\&
\&./src/nxt_sprintf.h:15: