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.