Was ist das Äquivalent des Linux-Befehls "updateb" für den Mac?

98293
Thierry Lam

Wenn ich den locateBefehl auf einer Linux-Maschine verwenden möchte, muss ich normalerweise sudo updatedbzuerst die Datenbank aktualisieren. Ich kann den locateBefehl unter OS X 10.5 ausführen, kann ihn aber nicht finden updatedb. Was ist das entsprechende Update für den Mac?

220
Wenn Sie `locate` zum ersten Mal auf einer OS X-Box ausführen, werden Sie dazu aufgefordert, sudo launchctl load -w / System / Library / LaunchDaemons / com.apple.locate.plist` auszuführen. Török Gábor vor 14 Jahren 0
Je nachdem, wozu Sie `locate 'verwenden müssen, ist es möglicherweise bequemer, die Befehlszeilenschnittstelle für Spotlight' mdfind 'zu verwenden, da die Spotlight-Datenbank fast immer auf dem neuesten Stand ist und viel mehr Funktionalität bietet als lokalisieren. "man mdfind" Paul R vor 14 Jahren 11
Nun, upatedb und locate sind nette Dinge, aber sie müssen regelmäßig updateb ausführen (entweder updateb wird regelmäßig ausgeführt und das System wird zu unbequemen Zeiten verlangsamt, oder locate zeigt Verweise auf Dateien, die nicht mehr vorhanden sind). Ich denke also, anstatt locate / updateb einzurichten, wäre es vielleicht besser, sich mit (dem weitaus mächtigeren) Finden vertraut zu machen. amo-ej1 vor 14 Jahren 0
Während find für viele Dinge nützlich ist, muss es jedes Mal das Dateisystem durchlaufen. Wenn Sie die Orte einschränken können, an denen Sie suchen, ist das in Ordnung. Der Vorteil von locate ist, dass seine eigene Datenbank erhalten bleibt und nicht jedes Mal gesucht werden muss. Dies ist besonders wichtig bei großen und / oder entfernten Dateisystemen. Ich denke, dass jeder seinen Platz hat. KeithB vor 14 Jahren 9

4 Antworten auf die Frage

311
John T

Es ist locate.updatedbauf dem Mac.

Sudo /usr/libexec/locate.updatedb

Weitere Informationen finden Sie auf der Manpage locate.updatedb .

Diese "man" -Seite behauptet auch: * Sie wird normalerweise einmal pro Woche vom Job /System/Library/LaunchDaemons/com.apple.locate.plist ausgeführt. * (Und "man locate" erzählt einem von diesem Skript: * / usr.) /libexec/locate.updatedb Skript zum Aktualisieren der Suchdatenbank *) Arjan vor 14 Jahren 9
@Arjan: Es sollte einmal pro Woche ausgeführt werden, aber die Standardeinstellung ist deaktiviert und der Zeitpunkt, zu dem es ausgeführt werden sollte, ist sonntags 3 Uhr morgens (oder ähnliches), was nicht wirklich nützlich ist :) Studer vor 14 Jahren 5
Unter Linux führe ich normalerweise `sudo ionice -c3 updatedb` aus, das` updatedb` anweist, den I / O-Controller schön zu teilen (io nice), aber ich glaube nicht, dass dieser Befehl auf Mac verfügbar ist. Ich vermisse auch das `-r`-Flag für reguläre Ausdrücke, das mit GNU locate verwendet werden kann, obwohl ich nicht sicher bin, ob ich Homebrew verwenden und das von @Grogs erwähnte GNU locate installieren möchte cwd vor 12 Jahren 0
Beispiel für eine Macosx-Alternative zu "locate (-r)" und "updatedb", die Spotlight verwendet ("-i" natürlich optional): mdfind -name "mp4" | egrep -i "^ / Benutzer. * Downloads /.* Stuff" michael vor 11 Jahren 3
Wenn Sie * keine * Dateien finden, die Sie erwarten, beachten Sie diesen relevanten Vorbehalt im Abschnitt BUGS der [Manpage] (http://developer.apple.com/library/mac/#documentation/Darwin/). Referenz / ManPages / man1 / locate.1.html): `Die locate-Datenbank wird normalerweise vom Benutzer '' nobody '' erstellt, und das Dienstprogramm locate.updatedb (8) überspringt Verzeichnisse, die für den Benutzer '' nobody '' nicht lesbar sind. Gruppe "Niemand" oder Welt. Wenn Ihr HOME-Verzeichnis beispielsweise nicht für die Welt lesbar ist, befinden sich keine Ihrer Dateien in der Datenbank Ashutosh Jindal vor 8 Jahren 0
Wenn Sie `shell-init: Fehler beim Abrufen des aktuellen Verzeichnisses erhalten: getcwd: Zugriff auf übergeordnete Verzeichnisse nicht möglich: Berechtigung verweigert` `cd` in Ihrem Home-Verzeichnis, dh` cd ~ ` Michael Durrant vor 8 Jahren 0
Wenn Sie unter MacOS Sierra die Erlaubnis verweigert bekommen, gehen Sie zu root `cd /` und führen dann `sudo / usr / libexec / locate.updatedb` aus. yossile vor 7 Jahren 0
@michael Vielen Dank für den Hinweis, dass "mdfind" eine Alternative zur Verwendung von "locate" unter Mac OS ist. Noah Sussman vor 7 Jahren 0
81
Igor Vigasin

Sie können sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbden updatedbBefehl zur Verfügung stellen.

Heh, ich habe das gerade als Kommentar gepostet .. Dann sah ich das du gesagt hast. Ich denke, das ist ein schöner kleiner Mod. :) James T Snell vor 9 Jahren 0
oder Alias ​​es in Ihrem .bash_profile Jim Johnson vor 8 Jahren 3
19
Grogs

Ich persönlich habe gerade findutils installiert (MacPorts oder Homebrew verwenden).

Dann haben Sie GNU lokalisieren und updaten.

updateb funktioniert nicht ohne Sudo.

Ich persönlich bevorzuge es jedoch, pro Benutzer einen Standort zu haben. Wenn Sie Sudo kennen, werden andere Benutzer die Namen / Speicherorte aller Dateien kennen.

Ich habe einen Cron-Job zum Laufen:

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

Und in meinem .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"

Brew-Installation von Findutils unter OS X Mavericks gab mir einen `gupdatedb'-Befehl, keinen` updatedb`-Befehl. Leider hat mir dieser Befehl [einen hier beschriebenen Fehler] gegeben (http://www.rubycoloredglasses.com/2012/03/locate-and-updatedb-with-homebrew/) (auf die Ihre SO-Antwort verwiesen wird). Letztendlich habe ich als Update für `LC_ALL = 'C' sudo updatedb` ein Aliasing durchgeführt, aber ich weiß nicht, ob dies eine langfristige Lösung ist. David Rivers vor 10 Jahren 3
Fügen Sie am Anfang Ihres Pfads `/ opt / local / libexec / gnubin` hinzu, wenn Sie möchten, dass die von` macports` installierten `coreutils` und` findutils` mit ihren ursprünglichen Namen (und nicht mit dem `g`-Präfix) verfügbar sind Versionen). Ioannis Filippidis vor 10 Jahren 2
2
Peer Gynt

Wenn Sie locate ausführen, ohne zuvor die Datenbank zu aktualisieren, haben Sie die Möglichkeit, die empfohlene Methode des Betriebssystems anhand seiner Ausgabe zu sehen.

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