Что эквивалентно команде поиска Unix в Windows?
Я вижу, что find.exe
на Windows больше похоже на grep
. Я особенно заинтересован в эквиваленте
find . -name [filename]
Что эквивалентно команде поиска Unix в Windows?
Я вижу, что find.exe
на Windows больше похоже на grep
. Я особенно заинтересован в эквиваленте
find . -name [filename]
Ответы:
dir <drive: [drive:]> /s | findstr /i <pattern>
- альтернатива -
dir /s <drive:>\<pattern>
dir c: d: /s | findstr /i example.txt
- альтернатива -
dir /s c:\example.txt
dir c: /s example.txt
тоже работает
dir /s C:\example.txt
это.
\b
для краткости (вывод только пути); find <folder> -name <pattern>
-> dir /s /b <folder><pattern>
. Например find /tmp -name *.txt
-> dir \s \b C:\temp\*.txt
. Однако dir
всегда возвращает список абсолютных путей, тогда как find
всегда дает пути с префиксом<folder>
Find-ChildItem
Cmdlet в 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
cmdlet
Find-ChildItem
не является официальным командлетом и не входит в PowerShell; Вы должны загрузить этот командлет из OneDrive какого-то парня . Нет никакой разницы между этим и простой загрузкой bash, cygwin, unixutils или любой другой программы, которая просто позволяет вам запускать UNIX find
.
Без дополнительных командлетов вы можете просто использовать Get-ChildItem
:
Get-ChildItem -Filter *.zip -Recurse $pwd
dir
, ls
или gci
, если вы не пишете сценарий.
Если вы используете поиск Unix для поиска файлов в иерархии каталогов, то способ Powershell - использовать Get-ChildItem
(псевдоним gci
) командлет и фильтровать результаты с помощью Where-Object
(псевдоним where
) командлета.
Например, чтобы найти все файлы (начиная с C:\Users\
и рекурсивно) со словом «существенный» в его имени, используйте следующее:
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», является строкой, а не объектом.
Вы также можете использовать оператор Where, "?", Однако это больше работает и не намного быстрее:
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 .