Entspricht dem Unix-Befehl find unter Windows


34

Was entspricht dem Unix- Befehl find unter Windows?

Ich sehe, dass das find.exeunter Windows eher wie ein grep. Mich interessiert vor allem das Äquivalent von

find . -name [filename]

2
Stimmt etwas mit meiner Antwort nicht? Kann ich es verbessern? Benötigen Sie noch Hilfe?
— JohannesM

Entschuldigung, ich hatte diesen Thread vor einiger Zeit aus den Augen verloren. Vielen Dank für Ihre Antwort und entschuldigen Sie, dass Sie sie nicht früher akzeptiert haben.
— ARV

Antworten:


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

- alternative -

dir /s <drive:>\<pattern>

Beispiel

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

- alternative -

dir /s c:\example.txt

dir c: /s example.txtfunktioniert auch.
— DevSolar

@ DevSolar können Sie Ihren Befehl erneut überprüfen? Ich habe es unter Windows 5.1 Build 2600 SP3 getestet, und Ihr Befehl gibt mir nur die Liste der Dateien im Verzeichnis c:
— JohannesM

1
Äh ... Entschuldigung. Dient mir richtig aus dem Gedächtnis zu tippen. dir /s C:\example.txtes ist.
— DevSolar

1
für die ähnlichsten Ergebnisse verwende ich \bkurz (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 dirimmer eine Liste absoluter Pfade zurückgegeben, wohingegen findPfade mit dem Präfix "<folder>
— Hashbrown

28

Das Find-ChildItemCmdlet 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

  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

Offenlegung: Ich bin der Entwickler von Find-ChildItemCmdlet


2
Vielen Dank. Dies ist definitiv mehr im Sinne dessen, wonach ich bei der Beantwortung dieser Frage suchen würde.
— Supercheetah

7
Find-ChildItemist 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.
— Walen

19

Ohne zusätzliche installierte Cmdlets können Sie einfach Folgendes verwenden Get-ChildItem:

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

1
In diesem Fall möchten Sie wahrscheinlich eine der kurzen Aliasnamen verwenden dir, lsoder gci, wenn Sie ein Skript schreiben.
— Swonkie

5

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 -likeOption können Sie Platzhalter für den Mustervergleich verwenden.


2

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 .

Find -exec grep {} von UnixUtils funktioniert nicht richtig, es scheint "keine solche Datei oder kein solches Verzeichnis". Diese Lösung: PowerShell.exe -Befehl "dir -Recurse -ea 0 |? FullName -wie '* .log' | sls error", aus einem Batch-Skript funktioniert. Hinweis: Es müssen einfache Anführungszeichen verwendet werden, doppelte Anführungszeichen außerhalb.
— Kevinf
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.