Ada perintah find
dan locate
untuk mencari file di disk.
Saya tahu bahwa find
secara rekursif memproses semua subdirektori yang diperlukan untuk mencari file dan karena itu lambat tetapi mutakhir, sedangkan locate
menggunakan database yang diperbarui setiap saat (kapan tepatnya?) Untuk dengan cepat menunjukkan hasil yang mungkin sudah ketinggalan zaman.
Apakah ada perbedaan lain? Dalam situasi apa salah satu lebih suka yang satu atau yang lain? Dan kapan locate
database biasanya diperbarui?
anacron
. Saya tidak tahu apakah itu diinstal secara default pada sistem desktop / server, tetapi pada notebook. Ini berjalan saat boot dan melihat apakah ada tugas cron yang harus dijalankan saat sistem mati dan menjalankannya. Ini sangat membantu, tetapi dapat menyebabkan beberapa masalah jika Anda memiliki pekerjaan yang dijadwalkan jauh dari tengah malam. Itu dapat menyebabkan pekerjaan dijalankan saat boot dan sekali lagi ketika saatnya tiba - mungkin jauh lebih sedikit dari 24 jam kemudian (untuk pekerjaan sehari-hari.)Jawaban:
locate
benar-benar hanya baik untuk menemukan file dan menampilkannya kepada manusia. Anda dapat melakukan beberapa hal dengan itu, tetapi saya tidak akan mempercayainya cukup untuk menguraikan dan - seperti yang Anda katakan - tidak mungkin untuk menjamin keadaan basis data internal, lebih dari itu karena hanya dijadwalkan untuk dijalankan mulai/etc/cron.daily/mlocate
, sekali sehari!find
hidup. Ini menyaring, mengecualikan, mengeksekusi. Ini cocok untuk parsing. Ini dapat menampilkan jalur relatif. Itu bisa menampilkan path lengkap. Itu bisa melakukan hal berdasarkan atribut, bukan hanya nama.locate
tentu saja memiliki tempat di kotak alat saya, tetapi biasanya tepat di bagian bawah sebagai upaya terakhir untuk menemukan sesuatu. Lebih mudah daripadafind
juga.sumber
locate
jauh lebih cepat jika saya ingin mencari seluruh sistem file saya. Dan Anda dapat memperbarui basis data secara manualupdatedb
sebelum menggunakannya.sudo updatedb
)? Dan apakah ada peluang untuk melihat berapa umur databasenya?grep run-parts /etc/crontab
Anda akan melihat bahwa ini dikelolaanacron
(yang akan Anda lihatman anacron
lebih tangguh terhadap sistem yang tidak selalu ada). Dari apa yang saya lihat itu harus menjalankannya saat boot bukan jika Anda melewatkan waktu cron asli.-exec command {} \;
menjalankan perintah pada setiap file yang ditemukan. Saya memang suka menggunakanlocate -b
yang membatasi mencari untuk menemukan file yang cocok pada komponen akhir nama - tanpa sisa jalan. Saya sering mencobanya dulu karena sangat cepat. Selain itu, Anda dapat menjalankansudo updatedb
kapan saja Anda ingin me-refresh database loc.ls -R | grep 'file_name.txt'
Sebanyak saya suka Oli (yang banyak!) Saya tidak setuju dengan dia pada
find
perintah. Saya tidak suka itu.find
Perintah memakan waktu lebih dari tiga menitAmbil contoh perintah sederhana ini:
Butuh lebih dari tiga menit untuk
find
mencari semuanya mulai dari/
. Secara default rim pesan kesalahan muncul dan Anda harus mencari melalui mereka untuk menemukan apa yang Anda cari. Masih lebih baik daripadagrep
mencari seluruh drive untuk sebuah string yang membutuhkan 53 jam : `grep`ing semua file untuk sebuah string membutuhkan waktu lamaSaya tahu saya bisa mengutak-atik parameter perintah find untuk membuatnya bekerja lebih baik tetapi intinya di sini adalah jumlah waktu yang diperlukan untuk menjalankan.
locate
perintah memakan waktu kurang dari satu detikSekarang mari kita gunakan
locate
:The menemukan perintah mengambil kurang dari satu detik!
updatedb
hanya berjalan sekali sehari secara defaultMemang benar
updatedb
perintah yang memperbarui basis data lokasi hanya berjalan sekali sehari secara default. Anda dapat menjalankannya secara manual sebelum mencari file yang baru saja ditambahkan dengan menggunakan:Meskipun ini akan memakan waktu 3 detik, itu kecil dibandingkan dengan
find
3+ menit perintah.Saya telah memperbarui saya
sudo crontab -e
untuk memasukkan baris di bagian bawah:Sekarang setiap lima menit
updatedb
dijalankan danlocate
perintah basis data hampir selalu terkini.Tetapi tidak ada atribut?
Anda dapat mem-pipe
locate
output ke perintah lain. Jika misalnya Anda menginginkan atribut file yang dapat Anda gunakan:Ringkasan
Saya memposting jawaban ini untuk menunjukkan kecepatan dan kemudahan penggunaan
locate
. Saya mencoba untuk mengatasi beberapa perintah singkat yang ditunjukkan oleh orang lain.The
find
perintah perlu melintasi seluruh struktur direktori untuk menemukan file. Thelocate
perintah memiliki itu database sendiri yang memberikan kecepatan kilat itu dibandingkan.sumber
locate / display-auto-brightness
membutuhkan waktu 17 detik dan juga menampilkan setiap direktori dan file di semua disk.--regex
diperlukan karena ada terlalu banyak hasil yang dikembalikan dengan string pencarian saya. Saya akan menemukan dua contoh baru untuk menemukan dan menemukan dan memperbarui jawaban saya dalam beberapa menit.find
perintah itu berarti "cetak nama file semua file di direktori/
dandisplay-auto-brightness
." Saya pikir Anda bermaksud menggunakanfind / -name display-auto-brightness
, tetapi bahkan yang mencetak banyak kesalahan "Izin ditolak" sampah.