Quel est l'équivalent de la commande Unix find sous Windows?
Je vois que le find.exe
sous Windows ressemble davantage à une grep
. Je suis particulièrement intéressé par l'équivalent de
find . -name [filename]
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
La cmdlet Find-ChildItem
dans Windows Powershell est équivalente à la commande de recherche Unix/Linux.
http://windows-powershell-scripts.blogspot.fr//08/unix-linux-find-equivalent-in.html
Certaines des options Find-ChildItem
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
Divulgation: Je suis le développeur de la cmdlet Find-ChildItem
En l'absence d'applets de commande supplémentaires installés, vous pouvez simplement utiliser Get-ChildItem
:
Get-ChildItem -Filter *.Zip -Recurse $pwd
Si vous utilisez la recherche d'Unix pour rechercher des fichiers dans une hiérarchie de répertoires, la méthode Powershell consiste à utiliser la cmdlet Get-ChildItem
(l'alias est gci
) et à filtrer les résultats à l'aide de la cmdlet Where-Object
(l'alias est where
).
Par exemple, pour rechercher tous les fichiers (à partir de C:\Users\
et de manière récursive) avec le mot "essential" dans son nom, utilisez ce qui suit:
PS> gci -Path "C:\Users\" -Recurse | where {$_.Name -like '*essential*'}
L'option -like
vous permet d'utiliser des caractères génériques pour la correspondance de modèle.
Celui-ci n'est pas exactement GNU find, mais correspond plus fidèlement à la philisophie en 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 et non un objet.
Vous pouvez également utiliser l’opérateur Where, "?", Cependant, cela demande 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 .