Was entspricht dem Unix- Befehl find unter Windows?
Ich sehe, dass das find.exe
unter Windows eher wie ein grep
. Mich interessiert vor allem das Äquivalent von
find . -name [filename]
Was entspricht dem Unix- Befehl find unter Windows?
Ich sehe, dass das find.exe
unter Windows eher wie ein grep
. Mich interessiert vor allem das Äquivalent von
find . -name [filename]
Antworten:
dir <drive: [drive:]> /s | findstr /i <pattern>
- alternative -
dir /s <drive:>\<pattern>
dir c: d: /s | findstr /i example.txt
- alternative -
dir /s c:\example.txt
dir c: /s example.txt
funktioniert auch.
dir /s C:\example.txt
es ist.
\b
kurz (nur Pfade ausgeben); find <folder> -name <pattern>
-> dir /s /b <folder><pattern>
. ZB find /tmp -name *.txt
-> dir \s \b C:\temp\*.txt
. Es wird jedoch dir
immer eine Liste absoluter Pfade zurückgegeben, wohingegen find
Pfade mit dem Präfix "<folder>
Das Find-ChildItem
Cmdlet in Windows PowerShell entspricht dem Befehl find unter Unix / Linux
http://windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html
Einige der Find-ChildItem-Optionen
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
Offenlegung: Ich bin der Entwickler von Find-ChildItem
Cmdlet
Find-ChildItem
ist kein offizielles Cmdlet und nicht in PowerShell enthalten. Sie müssen dieses Cmdlet von OneDrive eines Typen herunterladen . Es gibt keinen Unterschied zwischen dem Herunterladen von Bash, Cygwin, Unixutils oder einem anderen Programm, mit dem Sie nur UNIX ausführen können find
.
Ohne zusätzliche installierte Cmdlets können Sie einfach Folgendes verwenden Get-ChildItem
:
Get-ChildItem -Filter *.zip -Recurse $pwd
dir
, ls
oder gci
, wenn Sie ein Skript schreiben.
Wenn Sie mit der Unix-Suche nach Dateien in einer Verzeichnishierarchie suchen, können Sie das Cmdlet Get-ChildItem
(alias is gci
) in Powershell verwenden und die Ergebnisse mit dem Cmdlet Where-Object
(alias is where
) filtern.
C:\Users\
Verwenden Sie beispielsweise Folgendes , um alle Dateien (beginnend mit und rekursiv) mit dem Wort "essential" im Namen zu suchen :
PS> gci -Path "C:\Users\" -Recurse | where {$_.Name -like '*essential*'}
Mit dieser -like
Option können Sie Platzhalter für den Mustervergleich verwenden.
Dies ist keine GNU-Entdeckung, sondern entspricht eher der Linux-Kommandozeilenphilosophie unter Powershell:
PS> dir -recurse -ea 0 | % FullName | sls <grep_string>
Beispiel:
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
Hinweis: Alles, was nach "|% FullName" zurückgegeben wird, ist eine Zeichenfolge anstelle eines Objekts.
Sie können auch den Where-Operator "?" Verwenden. Dies ist jedoch arbeitsintensiver und nicht viel schneller:
PS> cd C:\
PS> dir -Recurse -ea 0 | ? FullName -like "*Program*"
| ? FullName -like "*Microsoft*"
| % FullName
| out-gridview
Hier ist eine kurze Verknüpfung:
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 .