Apakah ada cara untuk meningkatkan kecepatan `find`

15

Saya bertanya-tanya apakah ada cara untuk meningkatkan findkecepatan di terminal, tidak masuk akal bahwa menggunakan internet google untuk mencari akan memiliki kecepatan yang lebih baik daripada melakukan pencarian lokal untuk string atau hanya nama file.

Saya bertanya-tanya apakah ada cara untuk memiliki basis pengindeksan lokal, setelah dibangun, di masa depan, perintah find bisa sangat cepat.

Atau saran lain?

Terima kasih!

Daniel
sumber
Bisakah Anda mengedit posting Anda dengan sistem operasi dan / atau distribusi Anda?
Jodie C

Jawaban:

15

Coba gunakan locate, itu harus melakukan apa yang Anda inginkan.

Wojtek Rzepala
sumber
13
Itu biasanya ide yang baik untuk menyempurnakan jawabannya sedikit lebih. Seperti menyebutkan paket apa yang locateberasal (biasanya slocate), dan digunakan updatedbuntuk membangun kembali DB. :-)
Patrick
1
Ini tidak berfungsi untuk partisi dengan pengindeksan dimatikan. Misalnya, partisi NTFS mengalami kinerja yang buruk jika pengindeksan diaktifkan, sehingga loc tidak akan berfungsi untuk mereka "sebagaimana mestinya".
ojrask
9

Itu sangat tergantung pada apa kriteria pencarian Anda.

Jika Anda mencari nama file atau pola nama file, cari jauh lebih cepat, tetapi tidak cocok untuk file yang baru dibuat, karena indeks yang digunakan biasanya diperbarui hanya sekali sehari. Tetapi jika Anda bisa menggunakannya, itu sangat cepat.

Tetapi dengan find, Anda dapat mencari ukuran file, usia file, dan hal-hal lain, yang tidak dapat ditelusuri berdasarkan lokasi.

Jika Anda tahu ke mana harus mencari, Anda dapat menggunakan jalur untuk membatasi ruang lingkup pencarian:

find /some/path -size -10M -size +2M -mtime -365 ...

hanya akan mencari file dari 2 hingga 10 M, maksimum 1 tahun di / some / path.

Program, yang tersedia di jalur dapat dicari dengan mana, membantu, lib dan file konfigurasi dengan mana. Contoh:

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz
Pengguna tidak diketahui
sumber
7

Menggunakan locate

Alasannya adalah bahwa locatemenggunakan database semua direktori dan file yang sudah ada yang sudah dibangun seperti yang Anda bayangkan!
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

Pada interval tertentu (dan dapat diubah), suatu pekerjaan berjalan memindai sistem file dan kemudian membangun basis data dengannya. Kemudian database ini (terletak b), dengan indeks yang sesuai yang locateperintahnya bertentangan bukannya memindai melalui hard drive Anda pada saat itu.

Jadi kelebihannya adalah sangat cepat dibandingkan dengan pemindaian hard drive. The downside adalah bahwa database lokasi (locatedb) tidak 'hidup' jadi hanya dapat digunakan untuk file yang ada 'pada' pemindaian terakhir.

Untuk memperbarui locatedb sekarang jalankan updatedb(atau sudo updatedbjika perlu)

btw saya hanya berlari sudo updatedbsecara lokal dan butuh 3 1/2 detik! Saya punya 31.000 file.

Michael Durrant
sumber
1

Seperti yang orang lain tunjukkan, cari mungkin alat yang lebih baik untuk pencari yang lebih sederhana.

Namun, untuk pencarian yang lebih kompleks, Anda mungkin terjebak dengan find.

Salah satu cara untuk mempercepat menemukan adalah dengan mempersempit direktori di mana file Anda berada daripada mencari semua direktori root.

bigdaveyl
sumber
0

untuk operasi pencarian tunggal; Saya tidak menemukan speedup; kecuali mencoba mempersempit pencarian menggunakan findopsi.

Namun; jika Anda ingin melakukan beberapa findoperasi pada set file yang sama ; Saya mendapat speedup yang signifikan mengisi file sementara dengan semua nama file dan menggunakan grep. Tentu saja ini tidak memperhitungkan file akun yang ditambahkan atau dihapus.

Chris Maes
sumber