How to search for a word in entire content of a directory in linux
Solution 1
xargs
expects input in a format that no other command produces, so it's hard to use effectively. What's going wrong here is that you have a file whose name must be quoted on input to xargs
(probably containing a '
).
If your grep supports the -r
or -R
option for recursive search, use it.
grep -r word .
Otherwise, use the -exec
primary of find
. This is the usual way of achieving the same effect as xargs
, except without constraints on file names. Reasonably recent versions of find
allow you to group several files in a single call to the auxiliary command. Passing /dev/null
to grep
ensures that it will show the file name in front of each match, even if it happens to be called on a single file.
find . -type f -exec grep word /dev/null {} +
Older versions of find
(on older systems or OpenBSD, or reduced utilities such as BusyBox) can only call the auxiliary command on one file at a time.
find . -type f -exec grep word /dev/null {} \;
Some versions of find
and xargs
have extensions that let them communicate correctly, using null characters to separate file names so that no quoting is required. These days, only OpenBSD has this feature without having -exec … {} +
.
find . -type f -print0 | xargs -0 grep word /dev/null
Solution 2
I guess you mean the first option
grep recursive, for searching content inside files
grep -R "content_to_search" /path/to/directory
ls recursive, for searching files that match
ls -lR | grep "your_search"
Solution 3
If you have the GNU tools (which you do if the Linux tag is accurate) then you can use -print0
and -0
to get around the usual quoting problems:
find . -type f -print0 | xargs -0 grep word
Solution 4
There also ack, it's designed to skip special directories like .svn
, .git
and such. It's a daily tool for developers.
It's pretty close to grep for the common switches.
Ex. :
ack -r string .
Package ack-grep
on debian & debian likes.
Explorer
Updated on September 18, 2022Comments
-
Explorer over 1 year
need to search for something in entire content
I am trying:
find . | xargs grep word
I get error:
xargs: unterminated quote
How to achieve this?
-
G87C512 over 12 yearsgrep -rin for recursive-case_insensitive-show_line_number
-
G87C512 over 12 yearsI want to be able to search in content of each file.
-
Esoth over 12 yearsThe error message from xargs ("Unterminated quote") means the OP has a file in . which has a quote in its name. Your line will croak on that as well. Like mu noted, you need a different termination.
-
Peter.O over 12 years+1 especially for
/dev/null
. It is a nuisance when the output format can vary, depending on how many files are matched... thanks.