`grep -r -l` (-files-with-matches)와 동등한 Powershell


44

Powershell에서 주어진 정규 표현식과 일치하는 텍스트를 포함하는 디렉토리의 모든 파일을 (재귀 적으로) 어떻게 나열합니까? 문제의 파일에는 이해하기 어려운 긴 텍스트 줄이 포함되어 있으므로 일치하는 줄을보고 싶지 않습니다. 파일 이름 만 있습니다.

답변:


56

Select-String파일 내부의 텍스트를 검색 Select-Object하고 각 일치 항목에 대한 특정 속성을 반환 하는 데 사용할 수 있습니다 . 이 같은:

Get-ChildItem -Recurse *.* | Select-String -Pattern "foobar" | Select-Object -Unique Path

또는 별명을 사용하는 더 짧은 버전 :

dir -recurse *.* | sls -pattern "foobar" | select -unique path

그냥 파일 이름이 아닌 전체 경로를 원하는 경우, 교체 Path와 함께 Filename.


설명:

  1. Get-ChildItem-Recurse *.* 현재 디렉토리의 모든 파일과 모든 하위 디렉토리를 반환합니다.

  2. Select-String-Pattern "foobar" 주어진 패턴 "foobar"에 대해 해당 파일을 검색합니다.

  3. Select-Object-Unique Path각 일치에 대한 파일 경로 만 반환합니다. 이 -Unique매개 변수는 중복을 제거합니다.


select -Unique... 시원하고 새로운 것을 배웠습니다. 고마워요!
Michael Kropat

입니다 . 정말로 필요한가? Get-ChildItem -Recurse는 제 생각과 동일하게 작동합니다.
Piotr Perak

1
더 간결하게, gci -r | sls "foobar"| -독특한 경로 선택
David Markle

일치하는 항목이 없으면 PowerShell이 ​​"중지"된 것으로 나타나지 않습니다. 일치하는 항목이없는 경우 검색이 완료된 시점을 어떻게 알 수 있습니까?
reggaeguitar

2

powershell v1.0 및 v2.0에서는 작업 할 첫 번째 위치 매개 변수 (경로)를 지정해야합니다. -Recursion

테크넷 문서

재발

지정된 위치와 해당 위치의 모든 하위 항목에있는 항목을 가져옵니다.

Windows PowerShell 2.0 및 이전 버전의 Windows PowerShell에서 Recurse 매개 변수는 Path 매개 변수의 값이 C : \ Windows 또는 C : \ Windows *와 같은 자식 항목이있는 컨테이너 인 경우에만 작동합니다. C : \ Windows * .exe와 같은 하위 항목이 없습니다.



0

Select-String 에는 -List이 목적을위한 매개 변수가 있습니다.

각 입력 파일에서 첫 번째 일치 항목 만 반환하십시오. 기본적으로 Select-String은 발견 된 각 일치에 대해 MatchInfo 개체를 반환합니다.

ss64.com

다음과 같이 사용할 수 있습니다.

gci -Recurse | sls -List FOOBAR

샘플 결과는 다음과 같습니다 (Windows SDK 검색 ERROR_SUCCESS).

shared\bthdef.h:576:#define BTH_ERROR(_btStatus)   ((_btStatus) != BTH_ERROR_SUCCESS)
shared\netioapi.h:2254:    ERROR_SUCCESS on success.  WIN32 error code on error.
shared\rpcnterr.h:34:#define RPC_S_OK                          ERROR_SUCCESS
shared\winerror.h:214:// MessageId: ERROR_SUCCESS
um\advpub.h:40://      ERROR_SUCCESS_REBOOT_REQUIRED        Reboot required.
um\bluetoothapis.h:243://      ERROR_SUCCESS
um\ClusApi.h:571:_Success_(return == ERROR_SUCCESS)
um\dsparse.h:102:_Success_(return == ERROR_SUCCESS)
um\eapmethodpeerapis.h:228:// If the function succeeds, it returns ERROR_SUCCESS. Otherwise, it is
um\eappapis.h:56:// If the functions succeed, they return ERROR_SUCCESS. Otherwise, it is
um\MapiUnicodeHelp.h:583:                if ((hkeyPolicy && RegQueryValueExW(hkeyPolicy, szName, 0, &dwType, (LPBYTE)
&dwLcid, &dwSize) == ERROR_SUCCESS && dwType == REG_DWORD) ||
um\Mddefw.h:127:            routine will return ERROR_SUCCESS and the inherited data even if
um\Msi.h:1693:// Returns ERROR_SUCCESS if file is a package.
um\MsiQuery.h:192:// Returns ERROR_SUCCESS if successful, and the view handle is returned,
um\msports.h:46:    ERROR_SUCCESS if the dialog was shown
um\ncryptprotect.h:164:    ERROR_SUCCESS
um\NTMSAPI.h:1761:_Success_ (return == ERROR_SUCCESS)
um\oemupgex.h:108://  Returns:    ERROR_SUCCESS in case of success, win32 error otherwise
um\PatchWiz.h:90://                     ERROR_SUCCESS, plus ERROR_PCW_* that are listed in constants.h.
um\Pdh.h:415:_Success_(return == ERROR_SUCCESS)

FileInfo상대 경로와 단일 일치 결과 대신 실제 객체를 다시 가져 오려면 다음과 같이 사용할 수 있습니다.

Get-ChildItem -Recurse -File | where { Select-String -Path $_ -List -Pattern FOOBAR }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.