Não, não há um cmd do Windows ou PowerShell incorporado equivalente ao comando locate do Linux / GNU. No entanto, os equivalentes funcionais incluem dir /s do cmd.exe, conforme descrito por JKarthik , e essas opções do PowerShell:
PS> Get-ChildItem -Recurse . file-with-long-name.txt
Observe o uso de . , dizendo ao PowerShell por onde começar a pesquisa. Você pode, naturalmente, encurtar ao digitar na linha de comando:
PS> gci -r . file-with-long-name.txt
Eu faço muito isso, então adicionei uma função ao meu perfil:
PS> function gcir { Get-ChildItem -Recurse . @args }
PS> gcir file-with-long-name.txt
Isso permite curingas, semelhantes a locate :
PS> gcir [a-z]ooo*.txt
Veja help about_Wildcards para mais detalhes. Isso também pode ser escrito com Where-Object assim:
PS> gcir | where { $_ -like "[a-z]ooo*.txt"}
locate tem uma opção para combinar com expressões regulares. O mesmo acontece com o PowerShell:
PS> gcir | where { $_ -match "A.*B" }
O PowerShell oferece suporte a expressões regulares .NET completas. Veja about_Regular_Expressions .
Você também pode fazer outros tipos de consultas:
PS> gcir | where { $_.Length -gt 50M } # find files over 50MB in size
O desempenho dessas abordagens é lento para grandes coleções de arquivos, pois apenas procura no sistema de arquivos. O GNU locate usa um banco de dados . O Windows agora tem um banco de dados pesquisável, chamado Windows Desktop Search . Há uma API no WDS, que alguém incluiu em um cmdlet do PowerShell, aqui: link , permitindo coisas como:
PS> get-wds “kind:pics datetaken:this month cameramake:pentax”
com desempenho muito melhor que Get-ChildItem e esse tipo de consulta avançada (e sintaxe estranha). Além disso, observe que as aspas curvas funcionam bem no PowerShell, portanto, não é necessário editá-las ao copiá-las / colá-las.
Talvez alguém encontre (ou grave) cmdlets do PowerShell que permitam consultas idiomáticas ao WDS.