PowerShellでファイル名・中身から文字列検索|Get-ChildItemとSelect-String
概要
本記事では、PowerShellでファイル名や中身から文字列検索する方法について解説していきます。
というのもLinuxの grep みたいに、フォルダ全体から特定の文字列を含むファイルをサクッと探したい時って結構ありますよね(- -;
実はWindowsでも標準のGet-ChildItemとSelect-Stringだけで同じことが簡単にできちゃいます。
ここではフォルダ内のファイル名検索とファイルの中身検索の両方を、コマンド例付きで紹介していきます!
別ツールを入れなくてもWindowsだけで完結するので便利です。
それではやっていきましょう!
目次
検索対象のフォルダ構成
このページではわかりやすく説明するために例を交えてコマンドの説明を行います。
例に登場するファイルたちは下記のようなフォルダ構成&内容です。
- folder1
- aaa.txt
内容:apple - bbb.txt
内容:souppasta
- aaa.txt
- folder2
- ccc.json
内容:banana - bbbaaaccc.json
内容:agePasta - aaa.json
内容:pasta
- ccc.json
手順
フォルダ内のファイル名を検索
フォルダ内のファイル名に特定のワードが含まれる場合に、フルパスを取得します。
コマンド
1 | Get-ChildItem -Path "[検索先のフルパス]" -Recurse -File | Where-Object { $_.Name -like "*[検索ワード]*" } | Select-Object -ExpandProperty FullName |
例:ファイル名に"aaa"が含まれるファイルを検索する
1 | Get-ChildItem -Path "C:\search_folder\" -Recurse -File | Where-Object { $_.Name -like "*aaa*" } | Select-Object -ExpandProperty FullName |
上記のコマンドを実行すると、powershellの画面にファイルのフルパスが表示されます。
例のコマンドの場合、下記のファイルが出力されます。
- folder1
- aaa.txt
内容:apple
- aaa.txt
- folder2
- bbbaaaccc.json
内容:agePasta - aaa.json
内容:pasta
- bbbaaaccc.json
フォルダ内のファイルの中身を検索
ファイル内に特定のワードが含まれる場合、フルパスを取得します。
コマンド
1 | Select-String -Path "[検索先のフルパス]\*" -Pattern "[検索ワード]" -Recurse | Select-Object -ExpandProperty Path |
例:ファイル内に"pasta"が含まれるファイルを検索する
1 | Select-String -Path "C:\search_folder\*" -Pattern "pasta" -Recurse | Select-Object -ExpandProperty Path |
先ほどと同様にコマンドを実行すると、ファイルのフルパスが表示されます。
例のフォルダ構成の場合、下記のファイルが出力されます。
- folder1
- bbb.txt
内容:souppasta
- bbb.txt
- folder2
- aaa.json
内容:pasta
- aaa.json
英字の大文字をあいまい検索したい場合は下記の方法を使用します。
ex)英字の大文字小文字を判別せず検索する方法
英字の大文字小文字を判別せず、あいまい検索したい場合は下記のコマンドを使用します。
ファイルに検索結果を出力するようにしています。
コマンド
1 | Get-ChildItem -Path "[検索先のフルパス]" -Recurse -File | Select-String -Pattern "[検索ワード]" -CaseSensitive:$false | Select-Object -ExpandProperty Path | Out-File -FilePath "[検索結果の出力先]\[任意のファイル名].txt" -Encoding UTF8 |
例:ファイル内に"pasta"が含まれるファイルをあいまい検索する
1 | Get-ChildItem -Path "C:\search_folder\" -Recurse -File | Select-String -Pattern "pasta" -CaseSensitive:$false | Select-Object -ExpandProperty Path | Out-File -FilePath "C:\search_folder\file_word_search.txt" -Encoding UTF8 |
コマンドを実行すると、文字列が存在するファイルのフルパスが指定したファイルに出力されるはずです。
(例:C:\search_folder\file_word_search.txt)
例のフォルダ構成の場合、下記のファイルが出力されます。
- folder1
- bbb.txt
内容:souppasta
- bbb.txt
- folder2
- bbbaaaccc.json
内容:agePasta - aaa.json
内容:pasta
- bbbaaaccc.json
締め
こんな感じで、1日かかるタスクを1時間で終わらせました。
効率を重視するならこういったコマンドは知っておくべきですよね(^^
自分のブログではこういったコマンドをどんどん紹介していきます。
良ければ他の記事も見ていってください!
以上となります
ファイル検索の中身を手動で検索するのはエンジニアではありません。
それではお疲れさまでした。