最好的方法来扫描50万个文件夹/文件和输出path与.txt?

我经常需要查找日志文件,问题是日志文件被埋在几十个文件夹中,而查找50个文件需要花费一个小时或更长的时间。

我一直在使用一个batch file在一夜之间扫描驱动器,并以下列格式编译所有目录的列表

Z:\folder\folder2\folder3\folder4\folder5\folder6\folder7\ <about another 20 folders > \log.txt 

当前命令是:

 dir /b /-d /-p /s /A:-D > directories.txt 

这个txt文件有50万行。

然后,当我需要查找一组日志时,我将运行另一批次以基于扫描该txt文件来提取一组50个日志。

目前的解决scheme的问题是随着日志数据库的增长,现在需要12个小时以上的时间来扫描目录。 这使得它在一夜之间无法运行。 而且我需要每天晚上运行以保持日志最新。

题:

所以,问你们,做这件事的最好方法是什么? 我不能改变任何目录结构(这是一个数百人使用的日志数据库),我真的不知道除了批处理脚本以外的任何语言。 但它似乎是批量是有限的,不允许我做任何以下(这将解决我的问题)

  • 跳过过去48小时内未修改的目录
  • 跳过名称中具有特定关键字的文件夹的子目录

如果我可以批量执行上述2,则可能需要从50万行输出的txt文件大概为3千行。

如果你可以在机器上安装Cygwin,那么你就可以使用bash以及在Unix / Linux / BSD中使用的标准的grep / find / etc.工具,并且可以在Windows下在Cygwin shell下运行。 那么你可以使用各种解决方案,如:

grep在日期范围内创建的所有文件内

否则,你可能将不得不投资学习Powershell。

 >"output.txt" robocopy z:\ "%temp%" /l /s /nc /ns /njh /njs /ndl /fp /maxage:2 /xd folder7 otherFolder 

Robocopy(从Windows vista或更高版本,但在W2003资源工具包工具中可用)可用于获取具有指定条件的文件的递归列表:在过去两天内修改并从进程中排除某些文件夹。