Jaki jest odpowiednik polecenia Unix find w systemie Windows?
Widzę, że find.exe
w systemie Windows jest bardziej jak grep
. Szczególnie interesuje mnie odpowiednik
find . -name [filename]
Jaki jest odpowiednik polecenia Unix find w systemie Windows?
Widzę, że find.exe
w systemie Windows jest bardziej jak grep
. Szczególnie interesuje mnie odpowiednik
find . -name [filename]
Odpowiedzi:
dir <drive: [drive:]> /s | findstr /i <pattern>
- alternatywa -
dir /s <drive:>\<pattern>
dir c: d: /s | findstr /i example.txt
- alternatywa -
dir /s c:\example.txt
dir c: /s example.txt
też działa.
dir /s C:\example.txt
to jest.
\b
w skrócie (ścieżki wyjściowe tylko); find <folder> -name <pattern>
-> dir /s /b <folder><pattern>
. Np. find /tmp -name *.txt
-> dir \s \b C:\temp\*.txt
. dir
Zawsze jednak zwraca listę ścieżek bezwzględnych, a find
zawsze podaje ścieżki z prefiksem<folder>
Polecenie Find-ChildItem
cmdlet w programie Windows Powershell jest odpowiednikiem polecenia find w systemie Unix / Linux
http://windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html
Niektóre z opcji 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
Ujawnienie: Jestem twórcą polecenia Find-ChildItem
cmdlet
Find-ChildItem
nie jest oficjalnym poleceniem cmdlet i nie jest zawarte w PowerShell; musisz pobrać to polecenie cmdlet z OneDrive jakiegoś faceta . Nie ma różnicy między tym a pobieraniem bash, cygwin, unixutils lub jakiegokolwiek innego programu, który pozwala na uruchamianie UNIX-a find
.
Bez zainstalowanych dodatkowych poleceń cmdlet możesz po prostu użyć Get-ChildItem
:
Get-ChildItem -Filter *.zip -Recurse $pwd
dir
, ls
lub gci
, jeśli nie jesteś napisanie skryptu.
Jeśli używasz funkcji wyszukiwania Unixa do wyszukiwania plików w hierarchii katalogów, wówczas sposobem Powershell jest użycie polecenia cmdlet Get-ChildItem
(alias to gci
) i filtrowanie wyników za pomocą polecenia cmdlet Where-Object
(alias to where
).
Na przykład, aby znaleźć wszystkie pliki (zaczynające się C:\Users\
i rekurencyjnie) ze słowem „niezbędny” w nazwie, użyj następującego polecenia:
PS> gci -Path "C:\Users\" -Recurse | where {$_.Name -like '*essential*'}
Ta -like
opcja pozwala używać symboli wieloznacznych do dopasowywania wzorców.
Ten nie jest dokładnie znalezieniem GNU, ale ściślej pasuje do filozofii wiersza poleceń Linuksa w PowerShell:
PS> dir -recurse -ea 0 | % FullName | sls <grep_string>
Przykład:
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
Uwaga: Wszystko zwracane po „|% FullName” jest ciągiem, a nie obiektem.
Możesz także skorzystać z opcji Where Operator, „?”, Jednak jest to więcej pracy i niewiele szybsze:
PS> cd C:\
PS> dir -Recurse -ea 0 | ? FullName -like "*Program*"
| ? FullName -like "*Microsoft*"
| % FullName
| out-gridview
Oto szybki skrót:
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 .