Невероятно быстрый ящик для поиска файлов, встроенный в Rust
Пожалуйста, сообщайте о любых проблемах, с которыми вы сталкиваетесь при использовании поиска ржавчины здесь: Проблемы
Добавьте rust_search = "2.0.0"
в Cargo.toml.
[ dependencies ]
rust_search = " 2.0.0 "
use rust_search :: SearchBuilder ;
fn main ( ) {
let search : Vec < String > = SearchBuilder :: default ( )
. location ( "~/path/to/directory" )
. search_input ( "what to search" )
. more_locations ( vec ! [ "/anotherPath/to/search" , "/keepAddingIfYouWant/" ] )
. limit ( 1000 ) // results to return
. ext ( "extension" )
. strict ( )
. depth ( 1 )
. ignore_case ( )
. hidden ( )
. build ( )
. collect ( ) ;
for path in search {
println ! ( "{}" , path ) ;
}
}
use rust_search :: { SearchBuilder , similarity_sort } ;
fn main ( ) {
let search_input = "fly" ;
let mut search : Vec < String > = SearchBuilder :: default ( )
. location ( "~/Desktop/" )
. search_input ( search_input )
. depth ( 1 )
. ignore_case ( )
. build ( )
. collect ( ) ;
similarity_sort ( & mut search , & search_input ) ;
for path in search {
println ! ( "{:?}" , path ) ;
}
}
поиск без сортировки по сходству
["afly.txt", "bfly.txt", "flyer.txt", "fly.txt"]
поиск с сортировкой по сходству
["fly.txt", "flyer.txt", "afly.txt", "bfly.txt",]
use rust_search :: SearchBuilder ;
let files : Vec < String > = SearchBuilder :: default ( )
. location ( "/path/to/directory" )
. ext ( "file_extension" )
. build ( )
. collect ( ) ;
use rust_search :: SearchBuilder ;
let files : Vec < String > = SearchBuilder :: default ( )
. location ( "/path/to/directory" )
. depth ( 1 )
. build ( )
. collect ( ) ;
Чтобы фильтровать файлы по дате_создания, дате_модификации, размеру_файла и/или пользовательскому_фильтру, используйте:
use rust_search :: { FileSize , FilterExt , SearchBuilder } ;
use std :: time :: { Duration , SystemTime } ;
let search : Vec < String > = SearchBuilder :: default ( )
. location ( "~/path/to/directory" )
. file_size_greater ( FileSize :: Kilobyte ( 200.0 ) )
. file_size_smaller ( FileSize :: Megabyte ( 10.0 ) )
. created_after ( SystemTime :: now ( ) - Duration :: from_secs ( 3600 * 24 * 10 ) )
. created_before ( SystemTime :: now ( ) )
. modified_after ( SystemTime :: now ( ) - Duration :: from_secs ( 3600 * 24 * 5 ) )
. custom_filter ( |dir| dir . metadata ( ) . unwrap ( ) . is_file ( ) )
. custom_filter ( |dir| !dir . metadata ( ) . unwrap ( ) . permissions ( ) . readonly ( ) )
. build ( )
. collect ( ) ;
Дополнительные примеры можно найти в документации.
Разница в размере выборки связана с тем, что fd и glob — это разные инструменты и имеют разные варианты использования. fd — это инструмент командной строки, который ищет файлы и каталоги. glob — это библиотека, которую можно использовать для поиска файлов и каталогов. Тест проводился на MacBook Air M2 с унифицированной памятью 16 ГБ.
Тесты выполняются с использованием технологии Hyperfine. Файлы тестов доступны в папке на диске с тестами.
Тест проводился для каталогов, содержащих 300 тыс. файлов.
Команда/Библиотека | Означает] | Мин [с] | Макс [с] | Родственник |
---|---|---|---|---|
rust_search | 1,317 ± 0,002 | 1,314 | 1.320 | 1.00 |
glob | 22,728 ± 0,023 | 22.690 | 22,746 | 17,25 ± 0,03 |
Тест проводился для каталогов, содержащих 45 тысяч файлов.
Команда/Библиотека | Среднее [мс] | Мин [мс] | Макс [мс] | Родственник |
---|---|---|---|---|
rust_search | 680,5 ± 2,1 | 678,3 | 683,6 | 1.00 |
fd -e .js | 738,7 ± 10,2 | 720,8 | 746,7 | 1,09 ± 0,02 |
+ rust_search is 17.25 times faster than Glob.
+ rust_search** is 1.09 times faster than FD.
Любой вклад будет очень признателен, поскольку эта библиотека все еще находится на ранней стадии своего развития.
Если вы хотите внести свой вклад в этот проект, пожалуйста, выполните следующие действия:
Этот проект лицензируется на условиях лицензии MIT.
Нажмите кнопку ниже, чтобы присоединиться к серверу Discord или Linkedin.