Équivalent de la commande Unix find sur Windows


34

Quel est l'équivalent de la commande Unix find sous Windows?

Je vois que find.exesur Windows ressemble plus à un grep. Je suis particulièrement intéressé par l'équivalent de

find . -name [filename]

2
Quelque chose ne va pas avec ma réponse? Puis-je l'améliorer? Avez-vous encore besoin d'aide?
— JohannesM

Désolé, j'avais perdu de vue ce fil il y a un moment. Merci pour votre réponse et excuses de ne pas l'accepter plus tôt.
— ARV

Réponses:


21
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

dir c: /s example.txtfonctionne aussi.
— DevSolar

@DevSolar pouvez-vous revérifier votre commande? Je l'ai testé sur Windows 5.1 Build 2600 SP3, et votre commande me donne juste la liste des fichiers dans le répertoire c:
— JohannesM

1
Euh ... désolé. Me sert bien de taper de mémoire. dir /s C:\example.txtc'est.
— DevSolar

1
pour les résultats les plus similaires que j'utilise \bpour les brèves (sortie uniquement les chemins); find <folder> -name <pattern>-> dir /s /b <folder><pattern>. Par exemple find /tmp -name *.txt-> dir \s \b C:\temp\*.txt. Cependant, dirrenvoie toujours une liste de chemins absolus, tandis que findtoujours donne les chemins préfixés par<folder>
— Hashbrown

28

L' Find-ChildItemapplet de commande dans Windows Powershell est un équivalent de la commande find Unix / Linux

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

Certaines des options 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-ChildItemcmdlet


2
Merci. C'est certainement plus à l'esprit de ce que je chercherais à répondre à cette question.
— supercheetah

7
Find-ChildItemn'est pas une applet de commande officielle et n'est pas incluse dans PowerShell; vous devez télécharger cette applet de commande à partir du lecteur OneDrive d'un gars . Il n'y a aucune différence entre cela et le téléchargement de bash, cygwin, unixutils ou tout autre programme qui vous permet simplement d'exécuter UNIX find.
— walen

19

Sans applets de commande supplémentaires installées, vous pouvez simplement utiliser Get-ChildItem:

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

1
Dans ce cas, vous souhaiterez probablement utiliser l'un des alias courts dir, lsou gci, sauf si vous écrivez un script.
— Swonkie

5

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

Par exemple, pour rechercher tous les fichiers (à partir de C:\Users\et récursivement) avec le mot «essentiel» dans son nom, utilisez ce qui suit:

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

L' -likeoption vous permet d'utiliser des caractères génériques pour la correspondance des modèles.


2

Celui-ci n'est pas exactement une trouvaille GNU, mais correspond plus étroitement à la philisophie de 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

Remarque: Tout ce qui est retourné après "|% FullName" est une chaîne, au lieu d'un objet.

Vous pouvez également utiliser l'opérateur Where, "?", Cependant, c'est plus de travail, et pas beaucoup plus rapidement:

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 .

Trouver -exec grep {} d'UnixUtils ne fonctionne pas correctement, il ne semble "pas un tel fichier ou répertoire". Cette solution: PowerShell.exe -Commande "dir -Recurse -ea 0 |? FullName -like '* .log' | sls error", à partir d'un script de batch fonctionne. Remarque: doit utiliser des guillemets simples à l'intérieur, des guillemets doubles à l'extérieur.
— kevinf
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.