2017-08-30 7 views

Répondre

0

Ok fausse alarme ..

Apparemment, son cas de Windows ayant un exécutable avec le même nom que findys msys2 sous c: \ windows \ system32 et la commande windows obtenant une priorité plus élevée dans la liste des chemins. Après avoir tapé explicitement le chemin d'accès complet à la version msys64 de find.exe cela fonctionne.

PS C:\Users\buster\Documents\> C:\msys64\msys64\usr\bin\find -name \*.c 

En outre, s'avère qu'il ya une meilleure façon de trouver les fichiers * .c natif de cmd.exe que vous pouvez appeler de Powershell comme ceci:

PS C:\Users\buster\Documents\> cmd /c dir /S /B *.v 
1

Si vous avez utilisé find comme ça (sans le chemin d'accès complet) vous avez probablement utilisé le find.exe livré avec Windows (C:\Windows\system32\find.exe), qui s'apparente plus à grep qu'à Unix find. Vous obtenez ce comportement car Windows recherche tous les répertoires dans $env:PATH pour les fichiers avec le nom donné (et l'une des extensions répertoriées dans $env:PATHEXT si aucune extension n'a été spécifiée) et exécute la première correspondance. Puisque %windir%\system32 est généralement au début du chemin, les exécutables à partir de là ont la priorité.

Vous pouvez ajouter C:\msys64\msys64\usr\bin au début du chemin (avant %windir%\system32), bien que je ne le recommanderais pas. Une meilleure façon serait de définir une alias pour la commande:

New-Alias -Name 'find' -Value 'C:\msys64\msys64\usr\bin\find.exe' 

alias ont priorité sur les fichiers. Vous pouvez placer la définition d'alias dans votre PowerShell profile afin qu'elle soit automatiquement chargée à chaque démarrage de PowerShell.

Ou vous pouvez simplement utiliser ls -r -fi '*.c' (abréviation de Get-ChildItem -Recurse -Filter '*.c'), ce qui correspond à la méthode PowerShell.