-
Notifications
You must be signed in to change notification settings - Fork 8.1k
Description
Select-String only supports file paths passed to -LiteralPath and (in resolved form) -Path.
As an aside: Even though the error message when you pass a directory path is technically correct, it could be more helpful:
Select-String: The file /path/to/dir cannot be read: Access to the path '/path/to/dir' is denied.
It would be convenient to automatically exclude directory matches from what a wildcard expression passed to -Path resolves to, given that they won't be processed anyway.
This would allow searching all files in a directory, whatever extension they have or whether they have one at all, with Select-String -Path * findme
On a side note: -Path's wildcard matching currently invariably excludes hidden files, so the only way to include hidden files in the search is to pipe from Get-Item / Get-ChildItem with -Force.
Current behavior
Setup: Create a directory that contains a subdirectory and a text file:
Push-Location (New-Item -Type Directory -Force (Join-Path ([io.path]::GetTempPath()) $PID))
$null = New-Item -Type Directory subd
'hi' > t.txtUsing wildcard expression * reports an error, because * also matches the directory, subd:
> Select-String -Path * hi
Select-String : The file .../subd cannot be read: Access to the path '.../subd' is denied.
...
t.txt:1:hi
Desired behavior
The directory wildcard match should be ignored.
> Select-String -Path * hi
t.txt:1:hi
Environment data
PowerShell Core v6.0.0-beta.6 on macOS 10.12.6
PowerShell Core v6.0.0-beta.6 on Ubuntu 16.04.3 LTS
PowerShell Core v6.0.0-beta.6 on Microsoft Windows 10 Pro (64-bit; v10.0.15063)
Windows PowerShell v5.1.15063.502 on Microsoft Windows 10 Pro (64-bit; v10.0.15063)