Windows で grep みたいにファイル検索する


指定したパスの中にあるファイルの中身を検索したいときに、linux ならば grep を使えばいいのですが、Windows にはそんなコマンドはないのです。Windows でもできないか調べたところ PowerShell を使えばいいようなので試してみました。

やりたいことは、あるディレクトリ内で指定した文字列が含まれるファイルを抽出することです。さらに拡張子も絞って、一部ディレクトリを除外したいです。

まずはコマンドから。

get-childitem "【検索したいディレクトリ】*" -include "*.【拡張子】" -recurse | where-object {$_.directory -notlike "【除外するディレクトリ】*"} | select-string -pattern "【正規表現】"

使い方は以下のような感じです。「C:\curry\」フォルダ(サブフォルダ内も含む。ただし「C:\curry\hot\」以下は除外)から、文字列「indian」がファイル内に含まれる「php」ファイルを検索します。

get-childitem "C:\curry\*" -include "*.php" -recurse | where-object {$_.directory -notlike "C:\curry\hot\*"} | select-string -pattern "indian"

上のコマンドだとファイル内で一致した文字列と、その文字列がある行数も出力されます。ファイルパスのみ取得したい場合は、後ろに以下のコマンドを追加します。最初の半角スペースを忘れないようにしてください。

 -List | Select-Object Path

文字コードが Shift-JIS(CP932)のファイルを検索したい場合は、Select-String のオプションで以下のように指定すると検索できます。

 -Encoding Default

以下のようにしてよく使っています。

get-childitem "C:\*" -exclude *.gif,*.jpg,*.jpeg,*.gif,*png,*.exe,*.jar,*.pdf,*.dll,*.zip,*.log,*.bk -recurse | where-object {$_.directory -notlike "*.svn*"} | select-string -pattern "【検索したい文字】"

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください