在没有索引的情况下search文件内的string的工具
我不得不在一个令人难以置信的旧的应用程序中改变一些连接string,编程人员认为用遍布整个连接string来整个应用程序是一个好主意。
Visual Studio的“当前项目”search是令人难以置信的缓慢,我不信任Windowssearch。
那么,什么是最好的免费,非索引文本search工具呢? 它所要做的就是返回一个包含文件夹及其子文件夹内所需string的文件列表。
我正在运行Windows 2003 Server。
Windows Grep做得非常好。
编辑: Windows Grep不再由开发人员维护或提供。 另一个下载链接在这里: Windows Grep – alternate
我是Notepad ++中“ 查找文件”对话框的粉丝。 奖金 :免费。
还有一个叫做findstr.exe
的Windows内置程序,您可以在其中search文件。
>findstr /s "provider=sqloledb" *.cs
代理Ransack是另一个好的。 它快速,免费,并具有一些其他不错的function,如壳集成。
我喜欢AstroGrep。 结果显示在列表中。 点击一行可以显示整行,作为预览突出显示。 这似乎是相当快,精益,是免费的。 在Windows 7,8,10和Windows Server 2008 R2上进行testing。 允许正则expression式。
AstroGrep是一个Microsoft Windows GUI文件search(grep)实用程序。 其function包括正则expression式,多function打印选项,存储最近使用的path,并有一个“上下文”function,这是非常好看的源代码
参考: AstroGrep
SeekFast非常方便search文件中的文本 – 文本文件,MS Word,Excel,OpenOffice等。 它有一个免费版本。
FileSeek 。 这是快速的,它是免费的。 它可以find文本string,或匹配正则expression式。
我是grepWin的忠实粉丝。 它是免费的,轻量级的,可以从资源pipe理器的shell。 我喜欢不必刻意去寻找和开始一个程序,以寻找一些东西。 我可以右键单击资源pipe理器并将其启动。
Visual Studio在文件夹中的search是我find的最快的。
我相信它智能地search文本(非二进制)文件,和其他工具(可能文本文件适合在Windows磁盘caching)不同,在同一文件夹中的后续search速度非常快。
VS2010在普通硬盘上,没有固态硬盘,需要1分钟的时间来search一个26GB的文件,源代码和二进制文件混合起来的20GB文件夹。 15k文件被search – 其余的可能会被跳过,因为是二进制文件。 在同一个文件夹中的后续search大约在几秒钟内(直到东西从caching中逐出)。
我发现下一个最接近的文件夹是grepWin。 大约3分钟。 我排除了大于2000KB的文件(默认)。 “包含二进制文件”设置在加速search方面似乎没有任何作用,它看起来像二进制文件仍然被触摸(错误?),但它们不会显示在search结果中。 后续search全部采取相同的3分钟 – 不能利用硬盘caching。 如果我限制到小于200k的文件,初始search是2.5分钟,随后的search大约是秒,几乎与高速caching中的VS一样快。
Agent Ransack和FileSeek在这个文件夹上都很慢,大约20分钟,因为search了一切,包括巨型的多GB二进制文件。 根据资源监视器,他们每秒search大约10-20MB。
更新:代理Ransack可以设置为search特定大小的文件,并使用<200KB截止时间为1:15分钟重新search和5秒后续search。 比grepWin快,总体速度和VS一样快。 如果你想在标签中保留几个search,并且你不想污染VS最近search到的文件夹列表,并且你想保留search二进制文件的能力,那么VS似乎并不想做。 代理Ransack也创build一个资源pipe理器上下文菜单条目,所以很容易从一个文件夹启动。 与grepWin相同,但更好的UI和更快。
我的新search设置是代理Ransack内容和一切文件名称(真棒工具,即时结果!)。
TextPad对于这类事情真的很好。 您可以免费使用它,但会收到一条警告消息,要求您购买它。 除此之外,它是一个很好的工具。
你可以安装cygwin(需要一些时间)并使用grep -R。
我倾向于总是使用grep或从unxutils中find。 这在ms-windows上很好用。
FileSearchy 。 这是快速和免费的。 它确实有索引,但只适用于文件名称而不是内容。
如果您不想安装非Microsoft工具,请从MicroSoft Sysinternals下载STRINGS.EXE,并执行如下步骤:
@echo off if '%1' == '' goto NOPARAM if '%2' == '' goto NOPARAM if not exist %1 goto NOFOLDER echo ------------------------------------------ echo - %1 : folder echo - %2 : string to be searched in the folder echo - PLEASE WAIT FOR THE RESULTS ... strings -s %1\* | findstr /i %2 > grep.txt notepad.exe grep.txt goto END :NOPARAM rem - input command not correct echo ==================================== echo Usage of GREP.CMD: echo Grep "SearchFolder" SearchString echo Please specify all parameters echo ==================================== goto END :NOFOLDER echo Folder %1 does not exist goto END :END rem - exit
我推荐使用GOW而不是cygwin,因为它更轻,但是仍然包含grep以及另外130多个* nix命令行utils,而不是> 100MB。
如果你正在寻找一个基于控制台的工具来做到这一点,那么你可以参考这个url,并为自己创build一个。
如果find文件夹中的search文本列表,并返回匹配相同名称的文件,也会返回,如果某个文件也包含文本
我可以推荐ack – 一个带有linux根的命令行程序,幸运的是在Windows上也很棒。 它比grep快,它忽略git / subversion目录和二进制文件,输出更容易理解。 打字确认比grep快25%;)
我尝试了babun(cygwin)和msit从git – 惊人的作品。 它是用Perl编写的,所以应该在cmd.exe中工作,并在OS上安装perl。