Powershellで、指定された正規表現に一致するテキストを含むディレクトリ内のすべてのファイルを(再帰的に)リストするにはどうすればよいですか?問題のファイルには理解できないテキストの非常に長い行が含まれているため、一致する行を表示したくありません。ファイル名だけです。
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
に置き換えます。
Get-ChildItem
-Recurse *.*
は、現在のディレクトリとそのすべてのサブディレクトリにあるすべてのファイルを返します。
Select-String
-Pattern "foobar"
は、指定されたパターン「foobar」のファイルを検索します。
Select-Object
-Unique Path
は、各一致のファイルパスのみを返します。 -Unique
パラメータは重複を排除します。
Powershell v1.0およびv2.0では、-Recursion
を使用するには、最初の位置パラメーター(パス)を指定する必要があることに注意してください。
-再帰
指定された場所とその場所のすべての子アイテムのアイテムを取得します。
Windows PowerShell 2.0以前のバージョンのWindows PowerShellでは、Recurseパラメーターは、Pathパラメーターの値がC:\ WindowsやC:\ Windows *などの子アイテムを持つコンテナーである場合にのみ機能し、 itemには、C:\ Windows * .exeなどの子アイテムがありません。
「grep」を実行したいディレクトリ内で以下のコマンドを使用し、[SEARCH_PATTERN]
一致させたいものに一致させます。これは再帰的で、ディレクトリ内のすべてのファイルを検索します。
dir -Recurse | Select-String - pattern [SEARCH_PATTERN]
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 }