Caja de búsqueda de archivos increíblemente rápida construida en Rust
Informe cualquier problema que encuentre al utilizar la búsqueda de óxido aquí: Problemas
Agregue rust_search = "2.0.0"
en 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 ) ;
}
}
búsqueda sin ordenación por similitud
["afly.txt", "bfly.txt", "flyer.txt", "fly.txt"]
buscar con ordenación por similitud
["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 ( ) ;
Para filtrar archivos por fecha_creación, fecha_modificación, tamaño_archivo y/o filtro_personalizado, utilice:
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 ( ) ;
Para obtener más ejemplos, consulte la documentación.
La diferencia en el tamaño de la muestra se debe al hecho de que fd y glob son herramientas diferentes y tienen casos de uso diferentes. fd es una herramienta de línea de comandos que busca archivos y directorios. glob es una biblioteca que se puede utilizar para buscar archivos y directorios. La prueba se realiza en una MacBook Air M2, memoria unificada de 16 GB.
Los puntos de referencia se realizan utilizando hiperfinos, los archivos de puntos de referencia están disponibles en la carpeta de la unidad de puntos de referencia.
La prueba comparativa se realizó en directorios que contenían archivos de 300K.
Comando / Biblioteca | Medio] | Min [s] | máx. [s] | Relativo |
---|---|---|---|---|
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 |
La prueba comparativa se realizó en directorios que contenían archivos de 45K.
Comando / Biblioteca | Media [ms] | Mín. [ms] | Máx. [ms] | Relativo |
---|---|---|---|---|
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.
Cualquier contribución será muy valorada ya que esta biblioteca aún se encuentra en sus primeras etapas.
Si desea contribuir a este proyecto, siga los pasos a continuación:
Este proyecto está licenciado según los términos de la licencia MIT.
Haga clic en el botón a continuación para unirse al servidor de Discord o Linkedin