我有大量的数据,大约50*50*10000文件,总文件大小为3TB。文件结构如下所示:/myhdd/Experiment_{id}/Run_{id}/Filename现在给定一个文件名,我想定位它的位置;然而,直接的find /myhdd -name "filename"是非常低效的。它需要查找整个硬盘才能找到一个文件。有没有更好的方法来做到这一点,比如以某种方式构建文件结构的索引来加速find?
50*50*10000
3TB
/myhdd/Experiment_{id}/Run_{id}/Filename
find /myhdd -name "filename"
find
yzckvree1#
也许你可以使用locate命令,它通常比find快:locate -b filename
locate
locate -b filename
dsekswqp2#
如果locate或各种find调用对于您的情况来说仍然很慢,您可以创建并使用路径搜索文件,正如已经注解的那样。您可以使用以下命令创建该“索引”文件
find . -type f > myindex
您可以使用-ctime定期更新它以追加新文件,或者从一开始就更新它,它只是您现在搜索的时间成本。然后你可以找到路径搜索任何文件名。这可能已经足够快了:
-ctime
fname="myfilename"; awk -F/ -v f="$fname" '$NF==f' myindex
Here与您的问题有关的更多信息。
yizd12fk3#
我经历过类似的情况,完全可以理解你的痛苦。帮助我的是fzf和fd工具。我也同意创建一个本地 IndexedDB 的其他答案,它可以作为一个cron作业。你可以编一个SHELL别名来搜索 IndexedDB 。我会让你自己决定最好的选择。..请回复我们这些方法的有效性:)。选项:
fzf
fd
你可以从这里了解更多关于fzf和fd的信息:
3条答案
按热度按时间yzckvree1#
也许你可以使用
locate
命令,它通常比find快:locate -b filename
dsekswqp2#
如果
locate
或各种find
调用对于您的情况来说仍然很慢,您可以创建并使用路径搜索文件,正如已经注解的那样。您可以使用以下命令创建该“索引”文件
您可以使用
-ctime
定期更新它以追加新文件,或者从一开始就更新它,它只是您现在搜索的时间成本。然后你可以找到路径搜索任何文件名。这可能已经足够快了:
Here与您的问题有关的更多信息。
yizd12fk3#
我经历过类似的情况,完全可以理解你的痛苦。帮助我的是
fzf
和fd
工具。我也同意创建一个本地 IndexedDB 的其他答案,它可以作为一个cron作业。你可以编一个SHELL别名来搜索 IndexedDB 。我会让你自己决定最好的选择。..请回复我们这些方法的有效性:)。选项:
fzf
fd
你可以从这里了解更多关于
fzf
和fd
的信息: