I'm looking for the string foo=
in text files in a directory tree. It's on a common Linux machine, I have bash shell:
grep -ircl "foo=" *
In the directories are also many binary files which match "foo=". As these results are not relevant and slow down the search, I want grep to skip searching these files (mostly JPEG and PNG images). How would I do that?
I know there are the --exclude=PATTERN
and --include=PATTERN
options, but what is the pattern format? The man page of grep says:
--include=PATTERN Recurse in directories only searching file matching PATTERN.
--exclude=PATTERN Recurse in directories skip file matching PATTERN.
Searching on grep include, grep include exclude, grep exclude and variants did not find anything relevant
If there's a better way of grepping only in certain files, I'm all for it; moving the offending files is not an option. I can't search only certain directories (the directory structure is a big mess, with everything everywhere). Also, I can't install anything, so I have to do with common tools (like grep or the suggested find).
I found this after a long time, you can add multiple includes and excludes like:
I find grepping grep's output to be very helpful sometimes:
Though, that doesn't actually stop it from searching the binary files.
The
--binary-files=without-match
option to GNUgrep
gets it to skip binary files. (Equivalent to the-I
switch mentioned elsewhere.)(This might require a recent version of
grep
; 2.5.3 has it, at least.)To ignore all binary results from grep
The awk part will filter out all the Binary file foo matches lines
those scripts don't accomplish all the problem...Try this better:
this script is so better, because it uses "real" regular expressions to avoid directories from search. just separate folder or file names with "\|" on the grep -v
enjoy it! found on my linux shell! XD
Try this:
--F
" under currdir ..(or link another folder there renamed to "--F
" iedouble-minus-F
.#> grep -i --exclude-dir="\-\-F" "pattern" *