PowerShell 中是否有类似 GNU 定位命令的东西?

PowerShell 中是否有类似 GNU 定位命令的东西?

有没有与 GNU 相当的locateWindows 7/8 中的命令?

locate可以将文件名作为输入,并将所有与输入名称相似的文件的路径作为输出,例如:

locate file-with-long-name.txt
/var/www/file-with-long-name.txt

答案1

不,没有 Windows cmd 或 PowerShell内置相当于 Linux/GNU 的命令。但是,功能等效项包括中描述的locatecmd.exe以及以下 PowerShell 选项:dir /sJKarthik

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

来源:Windows 8 命令行列表和参考

答案4

如果您不习惯 UNIX 定位 你不知道你错过了什么。

定位返回文件名 仅有的从 PC 中的每个驱动器即刻

输入:

定位一些文件名

并且每个指定的名称都会显示出来即刻。它不会在文件中查找碎片。速度来自使用更新数据库这可能需要一些时间,并且通常是一项每日计划任务。

我在这个帖子中找不到任何有用的东西所以我添加了我的解决方案:安装 Cygwin64,打开一个终端,更新数据库然后定位

我做了一个测试来突出性能差异,我搜索了腻子安装程序

在 Win10 上,在 Explorer 中花费 12 分 50 秒,在 Cygwin 终端中花费 4 秒。

我对碎片不感兴趣,这是 Explorer 搜索的“额外好处”,因此需要更多时间。是的,索引已打开。

相关内容