2013-07-29 3 views
3

디렉토리와 모든 하위 디렉토리에 키워드가 포함 된 모든 파일을 찾고 싶습니다.이 디렉토리를 가져야하는 .svn 디렉토리가 있습니다.findstr을 사용하여 gvim에서 svn 디렉토리를 제외하는 방법

리눅스 시스템에서

, 나는 쉽게 그것을 할 수 있습니다 :

grep -r keyword ./ --exclude-dir ".svn" 

을하지만 창문을 켤 때, findstr이 창에서 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 ***************************** 

사실, 내가 GVimgrep를 사용하는 것을 시도하고있다, 그것은 findstr` '호출합니다.

답변

2

AFAIK findstr에 특정 (하위) 폴더를 제외 할 수 없습니다.

$root = '.' 
$keyword = 'keyword' 

Get-ChildItem $root -Recurse -Force | ? { 
    -not $_.PSIsContainer -and $_.FullName -notlike "*\.svn*" 
} | Select-String $keyword -AllMatches 

을 아니면 .svn 하위 폴더가 숨겨져 있다는 사실을 살려이 할 수있는 : PowerShell에서 당신은하지만, 이런 식으로 뭔가를 할 수 있지만,

$root = '.' 
$keyword = "keyword" 

Get-ChildItem $root -Recurse | ? { -not $_.PSIsContainer } | 
    Select-String $keyword -AllMatches 

이 작동하지 않습니다, 검색하려는 일부 파일에 hidden 속성 집합이있는 경우

+0

나는 그들이 그렇게 필터를 사용할 필요가 없습니다 PowerShell을 3에서'은 Get-ChildItem을 -Exclude'을 스위치를 고정 경우 궁금하다. 나는 지금 어디 있는지 시험 할 수 없다. –

+0

사실, 나는'GVim'에서 grep을 사용하려고하는데, findstr를 호출 할 것입니다. – srain

+0

@srain 그런 다음'grep'을 사용하지 않습니까? –

1

파일에 내용이 .svn\이 아닌 것으로 가정하면 작동합니다. @ Christian.K의 도움에

findstr /s "keyword" * |findstr /v /i /L ".svn\" 
+0

VIM의 "grepprg"설정에서는 "open"명령 줄 (예 : findstr/s; 키워드 및 파일 패턴이 VIM에 의해 추가됨)이 필요합니다. 당신은/그 배치 파일에 래핑하고 VIM에서 사용할 수 있습니다. –

+0

@ Christian.K Vim은'$ *'를 통해 인수를 어디에 두는 지 지정할 수 있습니다. ': help 'grepprg' '를보십시오. –

+0

@IngoKarkat 오, 고맙습니다. 고마워요. 하지만 파이프를 사용하는 것은 여전히 ​​효과가 없다고 생각합니다. (적어도 필자는 그것을 작동시키지 못했습니다 .-) –

0

덕분에,이 운동했다 :

내가 아래 grepprg 설정 : 당신이 .svn\을 일치시킬 .If 이상에서만

:set grepprg=findstr\ /s\ $*\ \ ^\\\|\ findstr\ /v\ /i\ /L\ \".svn\" 

옵션은 .svn 일치 gvim의 경우 :

:set grepprg=findstr\ /s\ $*\ \ ^\\\|\ findstr\ /v\ /i\ /L\ \".svn\\\\\" 
0

Try cre bat 파일에 find.bat를 입력하고 find . keyword을 입력하십시오. 원하는 경우 을 사용하여 .을 입력하지 않아도됩니다.

@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 
관련 문제