我怎样才能比 find 或 location 更快地找到文件?

我怎样才能比 find 或 location 更快地找到文件?

我一直使用 find 命令在我的 1 TB 硬盘上查找文件。这需要很长时间。然后我使用了locate,事实证明,使用 updatedb 进行定期更新比locate更快。但locate的局限性在于我无法找到具有特定大小或修改/创建时间的文件。您能否建议我如何以更快的速度查找文件,或者在这种情况下如何以管道方式输出locate命令,以便可以显示或重定向所有其他信息(如大小、时间等)到文件。

答案1

我还没有看到任何接近 Chaitanya 愿望的答案。如果您想搜索文件名,locate、find、ls 和 grep 的组合就足够了。但我认为 Chaitanya 想要搜索“2011 年之前创建的所有文件”。这可以通过 find 完美完成,但我可以想象搜索 1TB 会花费很长时间(更多地取决于文件数量,不一定是总大小)。为了加快速度,我认为索引是不可避免的。locate(使用 updatedb 进行索引)的问题在于它不索引创建时间。

因此,Chaitanya 需要的是索引文件所需属性(文件名、文件大小、创建日期等等)的东西。然后是可以搜索这些属性的东西。据我所知,Ubuntu 上没有现成的解决方案。

Chaitanya 的一个重要评论:“现在,我正在设计一个基于 php 的 Web GUI...”。由于您的问题听起来很具体,也许您想自己构建一些东西。一些建议:

  • 在数据库中索引文件(使用 cronjob)并使用 SQL 进行搜索。

  • 使用 Lucene 进行索引和搜索(的Zend Lucene对于 PHP)

答案2

你可以试试追踪器。它有一个守护进程,用于等待文件更改并使用尽可能多的元数据更新数据库,还有一个可用于搜索文件的客户端。请注意,它仅索引用户目录,而不是整个硬盘。

主要缺点是它需要 CPU 时间进行索引,因此请仅在您的计算机有足够的电量时使用它。

您需要安装服务器和客户端,它们分别名为 tracker 和 tracker-gui。如果您在软件中心搜索 tracker,它们是前两个匹配项。如果您更喜欢从命令行安装它们:

sudo apt-get install tracker tracker-gui

答案3

回复评论:

ls -la "$(locate -d external.db "Duel of Fates (Darth ")"

生成:

-rw-rw-r-- 1 个用户组 4075134 2012-03-30 22:37 /home/user/Music/Star Wars: Episode 1 - Duel of Fates (Darth Maul's Theme).mp3

感谢 AskUbuntu 聊天室的 @Oli 向我透露了“一些”可以绕过 shell 转义的方法

答案4

使用“find option Parameter”(查找选项参数)。有关详细信息,请参阅“man find”。使用定位快速轻松地查找文档,例如“定位 *.jpg”

相关内容