29

Что эквивалентно команде поиска Unix в Windows?

Я вижу, что find.exe в Windows больше похож на grep . Я особенно заинтересован в эквиваленте

find . -name [filename]

5 ответов5

26

Командлет Find-ChildItem в Windows Powershell является эквивалентом команды поиска Unix/Linux

http://windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html

Некоторые из опций Find-ChildItem

  1. Find-ChildItem -Type f -Name ".*.exe"
  2. Find-ChildItem -Type f -Name "\.c$" -Exec "Get-Content {} | Measure-Object -Line -Character -Word"
  3. Find-ChildItem -Type f -Empty
  4. Find-ChildItem -Type f -Empty -OutObject
  5. Find-ChildItem -Type f -Empty -Delete
  6. Find-ChildItem -Type f -Size +9M -Delete
  7. Find-ChildItem -Type d
  8. Find-ChildItem -Type f -Size +50m -WTime +5 -MaxDepth 1 -Delete

Раскрытие информации: я являюсь разработчиком командлета Find-ChildItem

18
dir <drive: [drive:]> /s | findstr /i <pattern>

- альтернатива -

dir /s <drive:>\<pattern>

пример

dir c: d: /s | findstr /i example.txt

- альтернатива -

dir /s c:\example.txt
14

Без установленных дополнительных командлетов вы можете просто использовать Get-ChildItem:

Get-ChildItem -Filter *.zip -Recurse $pwd
3

Если вы используете поиск Unix для поиска файлов в иерархии каталогов, то способ Powershell заключается в использовании командлета Get-ChildItem (псевдоним gci) и фильтрации результатов с помощью командлета Where-Object (псевдоним where).

Например, чтобы найти все файлы (начиная с C:\Users\ и рекурсивно) со словом «essential» в имени, используйте следующее:

PS> gci -Path "C:\Users\"  -Recurse | where {$_.Name -like '*essential*'}

Опция -like позволяет использовать шаблоны для сопоставления с образцом.

1

Это не совсем 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .