No, non c'è un cmd di Windows PowerShell o incorporato equivalente a Linux / GNU locate
comando. Tuttavia, gli equivalenti funzionali includono cmd.exe dir /s
come descritto da JKarthik
e queste opzioni di PowerShell:
PS> Get-ChildItem -Recurse . file-with-long-name.txt
Nota l'uso di .
, dicendo a PowerShell da dove iniziare la ricerca. Ovviamente puoi accorciare digitando dalla riga di comando:
PS> gci -r . file-with-long-name.txt
Lo faccio molto, quindi ho aggiunto una funzione al mio profilo:
PS> function gcir { Get-ChildItem -Recurse . @args }
PS> gcir file-with-long-name.txt
Ciò consente caratteri jolly, simili a locate
:
PS> gcir [a-z]ooo*.txt
Vedi help about_Wildcards
per maggiori dettagli. Questo può anche essere scritto in Where-Object
questo modo:
PS> gcir | where { $_ -like "[a-z]ooo*.txt"}
locate
ha un'opzione per abbinare con regexes. Anche PowerShell:
PS> gcir | where { $_ -match "A.*B" }
PowerShell supporta espressioni regolari .NET complete. Vedere about_Regular_Expressions
.
Puoi fare anche altri tipi di query:
PS> gcir | where { $_.Length -gt 50M } # find files over 50MB in size
Le prestazioni di questi approcci sono lente per grandi raccolte di file, poiché effettuano solo ricerche nel filesystem. GNU locate
utilizza un database . Windows ora ha un database di ricerca, chiamato Ricerca desktop di Windows . Esiste un'API per WDS, che qualcuno ha racchiuso in un cmdlet di PowerShell, qui: http://www.codeproject.com/Articles/14602/Windows-Desktop-Search-Powershell-Cmdlet , che consente cose come:
PS> get-wds “kind:pics datetaken:this month cameramake:pentax”
con prestazioni molto migliori di Get-ChildItem
e questo tipo di query complesse (e sintassi scomoda). Inoltre, nota che le virgolette ricci funzionano bene in PowerShell, quindi non è necessario modificare quell'esempio quando lo copi / incolli.
Forse qualcuno troverà (o scriverà) i cmdlet di PowerShell che consentono query idiomatiche su WDS.
locate
, puoi descrivere cosa vuoi che faccia?