はじめに
GNU の findutils に慣れている人が Powershell で実行したいコマンドの一つが find
です。
PowerShell では、ファイルを検索するために Get-ChildItem
を提供していますが、いちいち API を覚えてもいられない (せっかく苦労して find
も覚えたのに・・・) ので、PowerShell 上で GNU find のように Get-ChildItem
を呼び出せるラッパー関数を書きました。
コード
以下の関数を $profile
に定義してください。
function find {
param(
[parameter(Mandatory=$True)]
[String]$path,
[String]$name,
[String]$iname,
[String]$type,
[Int]$maxdepth=-1
)
$command = "Get-ChildItem -Path $path -Recurse"
if ($type -eq "f") {
$command += " -File"
}
elseif ($type -eq "d") {
$command += " -Directory"
}
if ($name) {
$command += " -Filter `"$name`""
}
elseif ($iname) {
$command += " -Filter `"$iname`""
}
if ($maxdepth > 0) {
$command += " -Depth $maxdepth"
}
Write-Host $command -ForegroundColor Green
Invoke-Expression $command
}
Example
上記の find
は次のように呼び出すことができます。
find . -type f -name "*.py" -maxdepth 3
まだ必要最低限のパラメータ指定しか出来ないので、今後改良していきたいです。