This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: grep -i -R path32 * vs grep -i -R path32 *.vb*


On 10-10-2002 1:24, Igor Pechtchanski wrote:
On Wed, 9 Oct 2002, Sheryl McKeown wrote:


Better titled, "That dot thing again on Windows XP
Pro..."

Ok, again I'm trying to search recursively through a
directory structure looking for specific values.

According to grep --help grep -R should walk the
directory structure.  Cool.

So, "grep -i -R path32 *" returns, as expected,
.grep -i -R path32 *
IntelliLab/IntelliLab.vbp:Path32="..Build"
IntelliLab/IntelliLabR.vbp:Path32="..BUILD"
IntelliLab/intellilabr.vbpold:Path32="Build"
LabTestMnt/LabTestMnt.vbp:Path32="..BUILD"
Ordent/ordent.vbp:Path32="..BUILD"
QC/qc.vbp:Path32="..BUILD"
Reports/Reports.vbp:Path32="..BUILD"
RsltsEnt/RsltsEnt.vbp:Path32="..BUILD"
RsltsInqry/ptresinq.vbp:Path32="..BUILD"

But I want to search only files with a specific
extension.  Enter the dot thing.  So I try
grep -i -R path32 *.vb*
which returns nothing.

I understand that the directories, technically, do not
have a . in the name, therefore they won't be
searched.  The same reason grep -i -R path32 *.*
returns nothing.

So the question becomes, how do I grep a directory
structure and search only files with a specific name.
(I prefere a grep only solution vs "find . -name
"somefilename" -exec ...).

Thanks,
Sheryl

Sheryl,

This isn't a "dot problem".  This is a grep usage problem.
Specifically, you're telling grep to only look in directories which have '.vb' in their name.

Frankly, I don't see why you are so opposed to 'find'...  'find . -name
\*.vb\* -exec grep -ni path32 {} \; -print' can be a very powerful tool.
If you want the filenames printed before the matches (ala 'grep -R'),
consider using 'find . -name \*.vb\* -print | xargs grep -i path32'.  If
you have files with spaces and weird characters, try 'find . -name \*.vb\*
-print0 | xargs -0 grep -i path32'.
You should always use the -print0/-0 syntax, just in case. And I'd find it a bit more readable as:
find . -name '*.vb' -print0 | xargs -0 grep -i path32

Of course, if you really want to stick with "pure grep", you could always
do 'grep -i -R path32 --include=\*.vb\*' (now that I've pitched in an
argument in favor of "find" :-D)...  'info grep' should also be quite
helpful.
Alternatively, you could use zsh as your shell, and just use:
	grep -i path32 **/*.vb*
:-)

 - Michael


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]