我想查找目录中包含关键字的所有文件以及所有子目录,并且有一些.svn
目录,我应该将这些目录放入其中。
在Linux系统中,我可以通过以下方式轻松完成:
grep -r keyword ./ --exclude-dir ".svn"
但是当我转向窗口时,findstr
代替了Windows中的grep
,我尝试这样做:
findstr /s keyword ./*
结果将返回.svn
目录,这不是我想要的。
我读了TN Findstr, on microsoft website
/v : Prints only lines that do not contain a match.
但是,当我尝试下面的内容时,它仍然不起作用。
findstr /s keyword /v ".svn" ./*
我认为使用findstr
可能存在一些问题。任何帮助都会很棒,提前谢谢。
***************************** update1 *****************************
事实上,我想在grep
中使用GVim
,它会调用'findstr`。
答案 0 :(得分:2)
AFAIK您无法排除findstr
中的特定(子)文件夹。在PowerShell中,您可以执行以下操作:
$root = '.'
$keyword = 'keyword'
Get-ChildItem $root -Recurse -Force | ? {
-not $_.PSIsContainer -and $_.FullName -notlike "*\.svn*"
} | Select-String $keyword -AllMatches
或者您可以利用.svn
子文件夹被隐藏的事实并执行此操作:
$root = '.'
$keyword = "keyword"
Get-ChildItem $root -Recurse | ? { -not $_.PSIsContainer } |
Select-String $keyword -AllMatches
但是,如果要搜索的某些文件设置了hidden
属性,则无法工作。
答案 1 :(得分:1)
这应该有效,假设您的文件未在内容中返回.svn\
。
findstr /s "keyword" * |findstr /v /i /L ".svn\"
答案 2 :(得分:0)
感谢@ Christian.K的帮助,我解决了这个问题:
我将grepprg设置如下:
:set grepprg=findstr\ /s\ $*\ \ ^\\\|\ findstr\ /v\ /i\ /L\ \".svn\"
上述选项仅与.svn
匹配。如果您想与.svn\
中的gvim
匹配,您应该:
:set grepprg=findstr\ /s\ $*\ \ ^\\\|\ findstr\ /v\ /i\ /L\ \".svn\\\\\"
答案 3 :(得分:0)
尝试创建包含此文件的bat文件find.bat并键入find . keyword
。如果您愿意,可以使用doskey
隐藏必须输入.
。
@echo off
SETLOCAL
set curDir=%1
if "%curDir%"=="." set curDir=%cd%
for /f %%i in ('dir /b/a-h-d %curDir% 2^>nul') do findstr /ilmp %2 %curDir%\%%i
for /f %%i in ('dir /b/ad-h %curDir%') do call %0 %curDir%\%%i %2
ENDLOCAL