Quel est l'équivalent de la commande Unix find sous Windows?
Je vois que find.exe
sur Windows ressemble plus à un grep
. Je suis particulièrement intéressé par l'équivalent de
find . -name [filename]
Quel est l'équivalent de la commande Unix find sous Windows?
Je vois que find.exe
sur Windows ressemble plus à un grep
. Je suis particulièrement intéressé par l'équivalent de
find . -name [filename]
Réponses:
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
dir c: /s example.txt
fonctionne aussi.
dir /s C:\example.txt
c'est.
\b
pour 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, dir
renvoie toujours une liste de chemins absolus, tandis que find
toujours donne les chemins préfixés par<folder>
L' Find-ChildItem
applet 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
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 Find-ChildItem
cmdlet
Find-ChildItem
n'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
.
Sans applets de commande supplémentaires installées, vous pouvez simplement utiliser Get-ChildItem
:
Get-ChildItem -Filter *.zip -Recurse $pwd
dir
, ls
ou gci
, sauf si vous écrivez un script.
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' -like
option vous permet d'utiliser des caractères génériques pour la correspondance des modèles.
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 .