有没有与 GNU 相当的locate
Windows 7/8 中的命令?
locate
可以将文件名作为输入,并将所有与输入名称相似的文件的路径作为输出,例如:
locate file-with-long-name.txt
/var/www/file-with-long-name.txt
答案1
不,没有 Windows cmd 或 PowerShell内置相当于 Linux/GNU 的命令。但是,功能等效项包括中描述的locate
cmd.exe以及以下 PowerShell 选项:dir /s
JKarthik
PS> Get-ChildItem -Recurse . file-with-long-name.txt
请注意使用.
,告诉 PowerShell 从哪里开始搜索。当然,您可以在命令行中输入时缩短:
PS> gci -r . file-with-long-name.txt
我经常这样做,所以我在我的个人资料中添加了一个功能:
PS> function gcir { Get-ChildItem -Recurse . @args }
PS> gcir file-with-long-name.txt
这允许使用通配符,类似于locate
:
PS> gcir [a-z]ooo*.txt
请参阅更多详细信息。也可以这样help about_Wildcards
写:Where-Object
PS> gcir | where { $_ -like "[a-z]ooo*.txt"}
locate
有一个使用正则表达式匹配的选项。PowerShell 也有:
PS> gcir | where { $_ -match "A.*B" }
PowerShell 支持完整的 .NET 正则表达式。请参阅about_Regular_Expressions
。
您也可以执行其他类型的查询:
PS> gcir | where { $_.Length -gt 50M } # find files over 50MB in size
对于大量文件,这些方法的性能较慢,因为它只是搜索文件系统。GNUlocate
使用数据库。Windows 现在有一个可搜索的数据库,称为Windows 桌面搜索有人已使用 PowerShell cmdlet 包装了 WDS 的一个 API,如下所示:http://www.codeproject.com/Articles/14602/Windows-Desktop-Search-Powershell-Cmdlet,允许如下操作:
PS> get-wds “kind:pics datetaken:this month cameramake:pentax”
性能比 好得多Get-ChildItem
,并且具有这种丰富的查询(和尴尬的语法)。另外,请注意,花括号在 PowerShell 中工作正常,因此复制/粘贴时无需编辑该示例。
也许有人会找到(或编写)允许对 WDS 进行惯用查询的 PowerShell cmdlet。
答案2
对于 PowerShell 解决方案,请尝试以下操作:
Get-ChildItem -Filter "file-with-long-name.txt" -Recurse
这将返回当前目录及其子目录中与给定名称匹配的所有文件。
该-Filter
参数接受通配符。如果当前目录包含您无权访问的系统文件,请添加-ErrorAction SilentlyContinue
以抑制错误。
有关详细信息,请参阅For more information, seeGet-Help Get-ChildItem
。
答案3
您可以在 Windows Shell 上使用以下命令:
dir [filename] /s
其中 filename 是您要查找的文件的名称,并/s
指在搜索中包含子目录。
更新以下命令/B
仅显示裸格式,完全符合要求。而且这似乎要快一点。
请尝试:
dir [filename] /s /B
答案4
如果您不习惯 UNIX 定位 你不知道你错过了什么。
定位返回文件名 仅有的从 PC 中的每个驱动器即刻。
输入:
定位一些文件名
并且每个指定的名称都会显示出来即刻。它不会在文件中查找碎片。速度来自使用更新数据库这可能需要一些时间,并且通常是一项每日计划任务。
我在这个帖子中找不到任何有用的东西所以我添加了我的解决方案:安装 Cygwin64,打开一个终端,更新数据库然后定位
我做了一个测试来突出性能差异,我搜索了腻子安装程序
在 Win10 上,在 Explorer 中花费 12 分 50 秒,在 Cygwin 终端中花费 4 秒。
我对碎片不感兴趣,这是 Explorer 搜索的“额外好处”,因此需要更多时间。是的,索引已打开。