Caisse de recherche de fichiers incroyablement rapide construite dans Rust
Veuillez signaler tout problème que vous rencontrez lors de l'utilisation de la recherche Rust ici : Problèmes
Ajoutez rust_search = "2.0.0"
dans 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 ) ;
}
}
recherche sans tri par similarité
["afly.txt", "bfly.txt", "flyer.txt", "fly.txt"]
recherche avec tri par similarité
["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 ( ) ;
Pour filtrer les fichiers par date_created, date_modified, file_size et/ou custom_filter, utilisez :
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 ( ) ;
Pour plus d'exemples, veuillez vous référer à la documentation
La différence de taille d'échantillon est due au fait que fd et glob sont des outils différents et ont des cas d'utilisation différents. fd est un outil en ligne de commande qui recherche des fichiers et des répertoires. glob est une bibliothèque qui peut être utilisée pour rechercher des fichiers et des répertoires. Le benchmark est réalisé sur un MacBook Air M2, 16 Go de mémoire unifiée.
Les benchmarks sont effectués en utilisant l'hyperfine, les fichiers Benchmarks sont disponibles dans le dossier du lecteur benchmarks.
Le benchmark a été réalisé sur un répertoire contenant 300K fichiers.
Commande / Bibliothèque | Moyens] | Min [s] | Max. [s] | Relatif |
---|---|---|---|---|
rust_search | 1,317 ± 0,002 | 1.314 | 1.320 | 1h00 |
glob | 22,728 ± 0,023 | 22.690 | 22.746 | 17,25 ± 0,03 |
Le benchmark a été réalisé sur un répertoire contenant 45K fichiers.
Commande / Bibliothèque | Moyenne [ms] | Min. [ms] | Max. [ms] | Relatif |
---|---|---|---|---|
rust_search | 680,5 ± 2,1 | 678.3 | 683,6 | 1h00 |
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.
Toute contribution serait grandement appréciée car cette bibliothèque en est encore à ses débuts.
Si vous souhaitez contribuer à ce projet, veuillez suivre les étapes ci-dessous :
Ce projet est sous licence selon les termes de la licence MIT.
Cliquez sur le bouton ci-dessous pour rejoindre le serveur Discord ou Linkedin