Apa yang setara dengan perintah updatedb Linux untuk Mac?

234

Jika saya ingin menggunakan locateperintah pada mesin Linux, saya biasanya menjalankan sudo updatedbpertama untuk memperbarui database. Saya dapat menjalankan locateperintah pada OS X 10.5 tetapi saya tidak dapat menemukannya updatedb. Apa updateb yang sesuai untuk mac?

Thierry Lam
sumber
Upb yang baik dan lokasi adalah hal-hal yang baik tetapi mereka harus menjalankan updatedb secara teratur (baik updateb berjalan secara teratur dan ini memperlambat sistem Anda pada waktu yang tidak nyaman, atau menemukan lokasi menunjukkan referensi ke file yang sudah tidak ada lagi). Jadi saya berpikir bahwa alih-alih menyiapkan loc / updatedb mungkin akan lebih baik untuk membiasakan diri dengan (yang jauh lebih kuat) temukan.
amo-ej1
9
Walaupun find berguna untuk banyak hal, itu memang harus melalui filesystem setiap kali. Jika Anda dapat mempersempit tempat-tempat yang Anda cari, itu tidak masalah. Keuntungan dari loc adalah menyimpan database sendiri, sehingga tidak perlu mencari setiap waktu. Ini sangat penting dengan sistem file besar dan / atau jarak jauh. Saya pikir masing-masing memiliki tempatnya.
KeithB
1
Saat pertama kali berjalan locatepada kotak OS X ia memberi tahu Anda untuk menjalankan sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist.
Török Gábor
12
Bergantung pada apa yang perlu Anda gunakan locate, Anda mungkin merasa lebih nyaman untuk menggunakan antarmuka baris perintah ke Spotlight mdfind,, karena basis data Spotlight hampir selalu terkini, dan menawarkan fungsionalitas yang jauh lebih banyak daripada mencari. man mdfind
Paul R

Jawaban:

327

Ada locate.updatedbdi Mac.

sudo / usr/libexec/locate.updatedb

Untuk informasi lebih lanjut, lihat halaman manual loc.updatedb .

John T
sumber
9
Itu manhalaman juga mengklaim: Hal ini biasanya dijalankan sekali seminggu dengan pekerjaan /System/Library/LaunchDaemons/com.apple.locate.plist. (Dan man locatememberi tahu seseorang tentang skrip itu: /usr/libexec/locate.updatedb Script untuk memperbarui database cari )
Arjan
5
@ Arjan: Ini harus dijalankan seminggu sekali, tetapi defaultnya dinonaktifkan dan waktu ketika itu harus dilakukan adalah pukul 3 pagi pada hari Minggu (atau yang serupa), yang tidak terlalu berguna :)
Studer
Di linux saya biasanya menjalankan sudo ionice -c3 updatedbyang memberitahu saya updatedbuntuk berbagi pengontrol i / o dengan baik (io bagus) tapi saya tidak berpikir perintah ini tersedia di mac. Saya juga merindukan memiliki -rflag ekspresi reguler yang dapat digunakan dengan lokasi GNU, walaupun saya tidak yakin saya ingin menggunakan homebrew dan menginstal lokasi GNU yang disebutkan oleh @Grogs
cwd
3
Contoh alternatif macosx untuk "temukan (-r)" dan "updatedb" yang menggunakan lampu sorot ("-i" tentu saja opsional): mdfind -name "mp4" | egrep -i "^ / Users. * Downloads /.* Stuff"
michael
Juga, jika Anda tidak menemukan file yang Anda harapkan, perhatikan peringatan yang relevan ini dari bagian BUGS di manual : The locate database is typically built by user ''nobody'' and the locate.updatedb(8) utility skips directories which are not readable for user ''nobody'', group ''nobody'', or world. For example, if your HOME directory is not world-readable, none of your files are in the database
Ashutosh Jindal
85

Anda dapat melakukannya sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbuntuk membuat updatedbperintah tersedia.

Igor Vigasin
sumber
Heh, saya baru memposting ini sebagai komentar .. Lalu melihat Anda mengatakan ini. Saya pikir ini adalah mod kecil yang bagus untuk dibuat. :)
James T Snell
3
atau alias di .bash_profile Anda
Jim Johnson
19

Secara pribadi, saya baru saja menginstal findutils (gunakan MacPorts atau Homebrew).

Kemudian Anda memiliki GNU untuk mencari dan memperbaruib.

updatedb tidak akan berfungsi tanpa sudo.

Secara pribadi saya lebih suka memiliki per pengguna yang berlokasi; jika Anda sudo pengguna lain akan tahu nama / lokasi semua file Anda.

Saya memiliki tugas cron untuk dijalankan:

updatedb --localpaths='/Users/grogs' --output='/Users/grogs/tmp/locatedb'

Dan di .zshrc .bashrc / .bashprofile saya:

export LOCATE_PATH="~/tmp/locatedb"

Grog
sumber
3
Menemukan-menginstal findutils pada OS X Mavericks memberi saya gupdatedbperintah, bukan perintah updatedb. Sayangnya perintah ini memberi saya kesalahan yang dijelaskan di sini (di mana jawaban SO Anda dirujuk). Pada akhirnya saya alias updatedbuntuk LC_ALL=’C’ sudo updatedbsebagai solusi, tapi saya tidak tahu apakah ini adalah solusi jangka panjang.
David Rivers
2
Tambahkan /opt/local/libexec/gnubindi awal jalan Anda, jika Anda ingin coreutilsdan findutilsdiinstal oleh macportsagar tersedia dengan nama asli mereka (dan bukan gversi -prefixed mereka ).
Ioannis Filippidis
2

Jika Anda menjalankan mencari tanpa memperbarui database terlebih dahulu, Anda memiliki kesempatan untuk melihat cara yang disarankan OS dari outputnya.

WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:

  sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
Tankman 六四
sumber