Rust로 구축된 엄청나게 빠른 파일 검색 상자
Rust 검색을 사용할 때 발생하는 문제를 여기에 보고하십시오: 문제
Cargo.toml에 rust_search = "2.0.0"
추가하세요.
[ 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 ( ) ;
date_created, date_modified, file_size 및/또는 custom_filter를 기준으로 파일을 필터링하려면 다음을 사용하세요.
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, 16GB 통합 메모리에서 수행되었습니다.
벤치마크는 하이퍼파인을 사용하여 수행되며, 벤치마크 파일은 벤치마크 드라이브 폴더에서 사용할 수 있습니다.
벤치마크는 300,000개의 파일이 포함된 디렉터리에서 수행되었습니다.
명령/라이브러리 | 수단] | 최소 [초] | 최대 [초] | 상대적인 |
---|---|---|---|---|
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 |
벤치마크는 45K 파일이 포함된 디렉터리에서 수행되었습니다.
명령/라이브러리 | 평균 [ms] | 최소 [밀리초] | 최대 [밀리초] | 상대적인 |
---|---|---|---|---|
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에 참여하려면 아래 버튼을 클릭하세요.