¿Cuál es el equivalente del comando de búsqueda de Unix en Windows?
Veo que find.exe
en Windows es más como un grep
. Estoy especialmente interesado en el equivalente de
find . -name [filename]
¿Cuál es el equivalente del comando de búsqueda de Unix en Windows?
Veo que find.exe
en Windows es más como un grep
. Estoy especialmente interesado en el equivalente de
find . -name [filename]
Respuestas:
dir <drive: [drive:]> /s | findstr /i <pattern>
- alternativa -
dir /s <drive:>\<pattern>
dir c: d: /s | findstr /i example.txt
- alternativa -
dir /s c:\example.txt
dir c: /s example.txt
también funciona.
dir /s C:\example.txt
está.
\b
para breve (solo rutas de salida); find <folder> -name <pattern>
-> dir /s /b <folder><pattern>
. Por ejemplo, find /tmp -name *.txt
-> dir \s \b C:\temp\*.txt
. Sin embargo, dir
siempre devuelve una lista de rutas absolutas, mientras que find
siempre proporciona rutas con el prefijo<folder>
El Find-ChildItem
Cmdlet en Windows Powershell es un equivalente del comando de búsqueda de Unix / Linux
http://windows-powershell-scripts.blogspot.in/2009/08/unix-linux-find-equivalent-in.html
Algunas de las opciones 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
Divulgación: soy el desarrollador de Find-ChildItem
cmdlet
Find-ChildItem
no es un cmdlet oficial y no está incluido en PowerShell; tienes que descargar este cmdlet del OneDrive de algún chico . No hay diferencia entre eso y solo descargar bash, cygwin, unixutils o cualquier otro programa que simplemente te permita ejecutar UNIX find
.
Sin cmdlets adicionales instalados, simplemente puede usar Get-ChildItem
:
Get-ChildItem -Filter *.zip -Recurse $pwd
dir
, ls
o gci
, a menos que esté escribiendo un script.
Si está utilizando la búsqueda de Unix para buscar archivos en una jerarquía de directorios, la forma de Powershell es usar el cmdlet Get-ChildItem
(alias is gci
) y filtrar los resultados con el cmdlet Where-Object
(alias is where
).
Por ejemplo, para buscar todos los archivos (comenzando C:\Users\
y de forma recursiva) con la palabra 'esencial' en su nombre, use lo siguiente:
PS> gci -Path "C:\Users\" -Recurse | where {$_.Name -like '*essential*'}
La -like
opción le permite usar comodines para la coincidencia de patrones.
Este no es exactamente el hallazgo de GNU, pero coincide más estrechamente con la filosofía de la línea de comando de Linux en powershell:
PS> dir -recurse -ea 0 | % FullName | sls <grep_string>
Ejemplo:
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
Nota: Todo lo que se devuelve después de "|% FullName" es una cadena, en lugar de un objeto.
También puede usar el Operador Where, "?", Sin embargo, es más trabajo y no mucho más rápido:
PS> cd C:\
PS> dir -Recurse -ea 0 | ? FullName -like "*Program*"
| ? FullName -like "*Microsoft*"
| % FullName
| out-gridview
Aquí hay un atajo rápido:
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 .