`grep -r -l`と同等のPowershell(--files-with-matches)


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

あなただけのファイル名ではなく、完全なパスをしたい場合は、交換してくださいPathFilename


説明:

  1. Get-ChildItem-Recurse *.* 現在のディレクトリとそのすべてのサブディレクトリ内のすべてのファイルを返します。

  2. Select-String-Pattern "foobar" 指定されたパターン「foobar」のファイルを検索します。

  3. Select-Object-Unique Path各一致のファイルパスのみを返します。この-Uniqueパラメーターは重複を排除します。


select -Unique...クール、新しいことを学びました。それは完璧に機能します、ありがとう!
マイケルクロパット14

です本当に必要?Get-ChildItem -Recurseは、私が思うにまったく同じように機能します。
ピョートルペラ

1
またはさらに簡潔に、gci -r | sls "foobar" | 選択
デビッドマークル

一致するものがない場合、PowerShellは「ハング」しているように見えますが、復帰しません。一致するものがない場合、検索がいつ行われるかをどのようにして知ることができますか?
レゲエギタル

2

powershell v1.0およびv2.0では、使用する最初の位置パラメータ(パス)を指定する必要があることに注意してください -Recursion

technetドキュメント

-再帰

指定された場所およびその場所のすべての子アイテムのアイテムを取得します。

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.