Який еквівалент команди Unix find у Windows?
Я бачу, що в find.exe
Windows більше схоже на grep
. Мене особливо цікавить еквівалент
find . -name [filename]
Який еквівалент команди Unix find у 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 під посиланням:
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 .