เทียบเท่ากับคำสั่ง updatedb ของ Linux สำหรับ Mac คืออะไร


234

ถ้าฉันต้องการใช้locateคำสั่งบนเครื่อง Linux ฉันมักจะเรียกใช้sudo updatedbก่อนเพื่อปรับปรุงฐานข้อมูล ฉันสามารถเรียกใช้locateคำสั่งบน OS X 10.5 updatedbแต่ฉันไม่สามารถหา การอัพเดต b ที่สอดคล้องกันสำหรับ mac คืออะไร?


upatedb อย่างดีและการค้นหาเป็นสิ่งที่ดี แต่พวกเขาจำเป็นต้องเรียกใช้ updatedb อย่างสม่ำเสมอ (ทั้ง updatedb ทำงานเป็นประจำและสิ่งนี้จะทำให้ระบบช้าลงในเวลาที่ไม่สะดวกหรือการค้นหาแสดงการอ้างอิงถึงไฟล์ที่ไม่มีอยู่อีกต่อไป) ดังนั้นฉันคิดว่าแทนที่จะตั้งค่าค้นหา / อัพเดมันอาจจะเป็นการดีกว่าถ้าคุณทำความคุ้นเคยกับการค้นหา
amo-ej1

9
แม้ว่าการค้นหาจะมีประโยชน์สำหรับสิ่งต่าง ๆ มากมาย แต่ก็ไม่จำเป็นต้องผ่านระบบไฟล์ทุกครั้ง หากคุณสามารถ จำกัด สถานที่ที่คุณมองหาได้ ข้อดีของการค้นหาคือการเก็บฐานข้อมูลของตัวเองและไม่จำเป็นต้องค้นหาในแต่ละครั้ง สิ่งนี้มีความสำคัญอย่างยิ่งกับระบบไฟล์ขนาดใหญ่และ / หรือระยะไกล ฉันคิดว่าแต่ละคนมีสถานที่
KeithB

1
เมื่อแรกที่ทำงานlocateบน OS X sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plistกล่องมันจะบอกคุณที่จะเรียกใช้
TörökGábor

12
ขึ้นอยู่กับสิ่งที่คุณต้องการใช้locateคุณอาจพบว่าสะดวกกว่าในการใช้อินเตอร์เฟสบรรทัดคำสั่งกับ Spotlight mdfindเนื่องจากฐานข้อมูล Spotlight เกือบจะเป็นข้อมูลล่าสุดอยู่เสมอและมีฟังก์ชันการทำงานมากกว่าการค้นหา man mdfind
พอลอาร์

คำตอบ:


327

มันlocate.updatedbอยู่บน Mac

sudo /usr/libexec/locate.updatedb

สำหรับข้อมูลเพิ่มเติมโปรดดูที่หน้าคน locate.updatedb


9
manหน้านั้นยังอ้างว่า: โดยปกติแล้วจะรันสัปดาห์ละครั้งโดยงาน /System/Library/LaunchDaemons/com.apple.locate.plist (และman locateบอกหนึ่งเกี่ยวกับสคริปต์นั้น: /usr/libexec/locate.updatedb สคริปต์เพื่ออัปเดตฐานข้อมูลการค้นหา )
Arjan

5
@Arjan: มันควรจะทำงานสัปดาห์ละครั้ง แต่เริ่มต้นมันเป็นคนพิการและเวลาเมื่อมันควรจะทำคือ 03:00 ในวันอาทิตย์ (หรือสิ่งที่คล้ายกัน) ซึ่งไม่เป็นประโยชน์จริงๆ :)
Studer

บน linux ฉันมักจะเรียกใช้sudo ionice -c3 updatedbซึ่งบอกupdatedbให้แชร์คอนโทรลเลอร์ i / o อย่างดี (io nice) แต่ฉันไม่คิดว่าคำสั่งนี้จะมีให้ใน mac ฉันยังพลาดมี-rธงแสดงออกปกติซึ่งสามารถนำมาใช้กับ GNU หาแม้ว่าฉันไม่แน่ใจว่าฉันต้องการใช้ Homebrew และติดตั้ง GNU locate กล่าวโดย @Grogs
CWD

3
ตัวอย่างทางเลือก macosx เพื่อ "ค้นหา (-r)" และ "updatedb" ที่ใช้สปอตไลท์ ("-i" เป็นตัวเลือกแน่นอน): mdfind -name "mp4" | egrep -i "^ / Users. * ดาวน์โหลด /.* เนื้อหา"
michael

นอกจากนี้หากคุณไม่พบไฟล์ที่คุณคาดหวังให้สังเกตคำเตือนที่เกี่ยวข้องนี้จากส่วน BUGS ของmanpage : 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

คุณสามารถทำได้sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbเพื่อให้updatedbคำสั่งที่มีอยู่


เฮ้ฉันเพิ่งโพสต์สิ่งนี้เป็นความคิดเห็น .. แล้วเห็นคุณพูดแบบนี้ ฉันคิดว่านี่เป็น mod ที่ดีที่จะทำ :)
James T Snell

3
หรือนามแฝงใน. bash_profile ของคุณ
Jim Johnson

19

โดยส่วนตัวฉันเพิ่งติดตั้ง findutils (ใช้ MacPorts หรือ Homebrew)

จากนั้นคุณมี GNU ค้นหาและอัพเดทข

updatedb จะไม่ทำงานหากไม่มี sudo

ส่วนตัวฉันชอบที่จะมีต่อผู้ใช้ที่อยู่แม้ว่า; ถ้าคุณ sudo ผู้ใช้รายอื่นจะรู้ชื่อ / ที่ตั้งของไฟล์ทั้งหมดของคุณ

ฉันมีงาน cron ให้ทำงาน:

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

และใน. zshrc .bashrc / .bashprofile ของฉัน:

export LOCATE_PATH="~/tmp/locatedb"


3
ชงติดตั้ง findutils บน OS X Mavericks ทำให้ฉันมีgupdatedbคำสั่งไม่ใช่อันupdatedbหนึ่ง น่าเสียดายที่คำสั่งนี้ให้ฉันข้อผิดพลาดอธิบายที่นี่ (ที่อ้างอิงคำตอบ SO ของคุณ) ในท้ายที่สุดผมเคยใช้นามแฝงupdatedbที่จะLC_ALL=’C’ sudo updatedbเป็นวิธีแก้ปัญหา แต่ผมไม่ทราบว่านี่คือการแก้ปัญหาระยะยาว
เดวิดริเวอร์ส

2
เพิ่ม/opt/local/libexec/gnubinที่จุดเริ่มต้นของเส้นทางของคุณหากคุณต้องการcoreutilsและfindutilsติดตั้งโดยmacportsจะสามารถใช้งานได้กับชื่อเดิมของพวกเขา (และไม่ใช่gรุ่นที่ได้รับการแก้ไข)
Ioannis Filippidis

2

หากคุณรันการค้นหาโดยไม่มีการอัพเดตฐานข้อมูลเป็นครั้งแรกคุณมีโอกาสเห็นวิธีที่ระบบแนะนำโดยเอาท์พุท

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.