Что эквивалентно команде поиска Unix в Windows?
Я вижу, что find.exe
в Windows больше похож на grep
. Я особенно заинтересован в эквиваленте
find . -name [filename]
Командлет Find-ChildItem
в Windows Powershell является эквивалентом команды поиска Unix/Linux
http://windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html
Некоторые из опций Find-ChildItem
Find-ChildItem -Type f -Name ".*.exe"
Find-ChildItem -Type f -Name "\.c$" -Exec "Get-Content {} | Measure-Object -Line -Character -Word"
Find-ChildItem -Type f -Empty
Find-ChildItem -Type f -Empty -OutObject
Find-ChildItem -Type f -Empty -Delete
Find-ChildItem -Type f -Size +9M -Delete
Find-ChildItem -Type d
Find-ChildItem -Type f -Size +50m -WTime +5 -MaxDepth 1 -Delete
Раскрытие информации: я являюсь разработчиком командлета Find-ChildItem
dir <drive: [drive:]> /s | findstr /i <pattern>
- альтернатива -
dir /s <drive:>\<pattern>
dir c: d: /s | findstr /i example.txt
- альтернатива -
dir /s c:\example.txt
Без установленных дополнительных командлетов вы можете просто использовать Get-ChildItem
:
Get-ChildItem -Filter *.zip -Recurse $pwd
Если вы используете поиск Unix для поиска файлов в иерархии каталогов, то способ Powershell заключается в использовании командлета Get-ChildItem
(псевдоним gci
) и фильтрации результатов с помощью командлета Where-Object
(псевдоним where
).
Например, чтобы найти все файлы (начиная с C:\Users\
и рекурсивно) со словом «essential» в имени, используйте следующее:
PS> gci -Path "C:\Users\" -Recurse | where {$_.Name -like '*essential*'}
Опция -like
позволяет использовать шаблоны для сопоставления с образцом.
Это не совсем GNU найти, но более близко соответствует философии командной строки Linux в PowerShell:
PS> dir -recurse -ea 0 | % FullName | sls <grep_string>
Пример:
PS> cd C:\
PS> dir -recurse -ea 0 | % FullName | sls "Program" | sls "Microsoft"
PS> dir -recurse -ea 0 | % FullName | sls "Program" | sls "Microsoft" | out-gridview
Примечание. Все, что возвращается после "|% FullName", является строкой, а не объектом.
Вы также можете использовать Оператор Где "?Однако, это больше работает, и не намного быстрее:
PS> cd C:\
PS> dir -Recurse -ea 0 | ? FullName -like "*Program*"
| ? FullName -like "*Microsoft*"
| % FullName
| out-gridview
Вот быстрый ярлык:
PS> function myfind {dir -recurse -ea 0 | % FullName | sls $args }
PS> cd C:\
PS> myfind "Programs" | sls "Microsoft"
#find all text files recursively from current directory
PS> myfind "\.txt$"
#find all files recursively from current directory
PS> myfind .