Peti pencarian file yang sangat cepat dibangun di Rust
Silakan laporkan masalah apa pun yang Anda temui saat menggunakan pencarian karat di sini: Masalah
Tambahkan rust_search = "2.0.0"
di 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 ) ;
}
}
pencarian tanpa pengurutan kesamaan
["afly.txt", "bfly.txt", "flyer.txt", "fly.txt"]
pencarian dengan pengurutan kemiripan
["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 ( ) ;
Untuk memfilter file berdasarkan tanggal_dibuat, tanggal_dimodifikasi, ukuran_file dan/atau filter_kustom, gunakan:
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 ( ) ;
Untuk contoh lebih lanjut, silakan merujuk ke Dokumentasi
Perbedaan ukuran sampel disebabkan oleh fakta bahwa fd dan glob adalah alat yang berbeda dan memiliki kasus penggunaan yang berbeda. fd adalah alat baris perintah yang mencari file dan direktori. glob adalah perpustakaan yang dapat digunakan untuk mencari file dan direktori. Benchmark dilakukan pada MacBook Air M2, memori Unified 16 GB.
Benchmark dilakukan menggunakan hyperfine, file Benchmark tersedia di folder drive benchmarks.
Benchmark dilakukan pada direktori yang berisi 300 ribu file.
Komando / Perpustakaan | Cara] | menit [s] | Maks [s] | Relatif |
---|---|---|---|---|
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 |
Benchmark dilakukan pada direktori yang berisi 45K file.
Komando / Perpustakaan | Berarti [ms] | menit [md] | Maks [ms] | Relatif |
---|---|---|---|---|
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.
Kontribusi apa pun akan sangat dihargai karena perpustakaan ini masih dalam tahap awal.
Jika Anda ingin berkontribusi pada proyek ini, silakan ikuti langkah-langkah di bawah ini:
Proyek ini dilisensikan berdasarkan ketentuan lisensi MIT.
Klik tombol di bawah untuk bergabung dengan server perselisihan atau Linkedin