管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

Powershellでfindしてxargsしてgrepしたいとき

Powershellでfindしてxargsしてgrepしたいときのやり方メモ。

確認環境

PS C:\Users\hoge> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.18362.752

minitty 2.9.6

やりたいこと

あるディレクトリに入っているファイルから、内容に特定の文字を含むファイル名を列挙する

Linuxでやる場合(今回はMinGWでやりました)

hoge@localhost MINGW64 ~/Desktop/20200806
$ ls
a.txt  b.txt  c.txt

hoge@localhost MINGW64 ~/Desktop/20200806
$ cat *txt
apple
beach
child

hoge@localhost MINGW64 ~/Desktop/20200806
$ find ./ -type f | xargs grep p
./a.txt:apple

Powershellでやる場合

PS C:\Users\hoge\Desktop\20200806> Get-ChildItem . | ?{ !$_.PSIsContainer}| %{ Select-String -Path $_.FullName -Pattern p}
# Get-ChildItem <起点となるパス> | ?{ !$_.PSIsContainer}| %{ Select-String -Path $_.FullName -Pattern <探索したい文字列>}
# 起点となるパスから再帰的に探索したい場合はGet-ChildItem <起点となるパス> -recurse とする
a.txt:1:apple

対応表

Linux Windows
find get-childitem+?{}(where-object)
xargs %{} (foreach-object)
grep select-string

参考にしました