private/Find-BucketsForCompletion.ps1

function Find-BucketsForCompletion {
        param([string]$Dir, [string]$Root, [string]$Filter)
        $di = [System.IO.DirectoryInfo]::new($Dir)
        $hasFiles = $di.GetFiles("*.dat").Length -gt 0 -or $di.GetFiles("*.json").Length -gt 0
        $relName = ""
        if ($Dir -ne $Root) {
            $relName = $Dir.Substring($Root.Length).TrimStart([System.IO.Path]::DirectorySeparatorChar).Replace([System.IO.Path]::DirectorySeparatorChar, '/')
        }
        if ($hasFiles) {
            if ($Filter -eq "*" -or $relName -like "$Filter*" -or ($relName -contains $Filter)) {
                $relName
            }
        }
        foreach ($subDir in $di.GetDirectories()) {
            if ($subDir.Name -eq ".buckets") { continue }
            Find-BucketsForCompletion -Dir $subDir.FullName -Root $Root -Filter $Filter
        }
    }