67 votes

Equivalent de la commande Unix find sous Windows

Quel est l'équivalent du système Unix trouver sous Windows ?

Je vois que le find.exe sous Windows ressemble davantage à un grep . Je suis particulièrement intéressé par l'équivalent de

find . -name [filename]

41voto

unixman83 Points 1882
dir <drive: [drive:]> /s | findstr /i <pattern>

- alternative -

dir /s <drive:>\<pattern>

exemple

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

- alternative -

dir /s c:\example.txt

37voto

djhaskin987 Points 449

Sans installer de cmdlets supplémentaires, vous pouvez simplement utiliser Get-ChildItem :

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

28voto

AVP Points 1

En Find-ChildItem La cmdlet dans Windows Powershell est un équivalent de la commande find d'Unix/Linux.

http://Windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html

Quelques options de Find-ChildItem

  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

Divulgation : je suis le développeur de Find-ChildItem cmdlet

8voto

Joshua Kan Points 279

Si vous utilisez la fonction find d'Unix pour chercher des fichiers dans une hiérarchie de répertoires, alors la méthode Powershell consiste à utiliser Get-ChildItem (l'alias est gci ) et filtrez les résultats avec la commande Where-Object (l'alias est where ) cmdlet.

Par exemple, pour trouver tous les fichiers (à partir de C:\Users\ et de façon récursive) avec le mot "essentiel" dans son nom, utilisez ce qui suit :

PS> gci -Path "C:\Users\"  -Recurse | where {$_.Name -like '*essential*'}

En -like vous permet d'utiliser des caractères génériques pour la correspondance des motifs.

3voto

Bill Moore Points 261

Celui-ci n'est pas exactement GNU find, mais correspond plus étroitement à la philosophie de la ligne de commande linux sous powershell :

PS> dir -recurse -ea 0 | % FullName | sls <grep_string>

Exemple :

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

Note : Tout ce qui est renvoyé après "| % FullName" est une chaîne de caractères, au lieu d'un objet.

Vous pouvez également utiliser l'opérateur Where, " ?", mais cela demande plus de travail et n'est pas beaucoup plus rapide :

PS> cd C:\
PS> dir -Recurse -ea 0 | ? FullName -like "*Program*" 
                       | ? FullName -like "*Microsoft*" 
                       | % FullName 
                       | out-gridview

Voici un raccourci rapide :

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 .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X