Was ist das Äquivalent zum Befehl updatedb von Linux für den Mac?

234

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

Thierry Lam
quelle
Gut upatedb und locate sind nette Dinge, aber sie müssen regelmäßig updateb ausführen (entweder wird updateb regelmäßig ausgeführt und dies verlangsamt Ihr System zu ungünstigen Zeiten oder locate zeigt Verweise auf Dateien an, die nicht mehr vorhanden sind). Anstatt locate / updatedb einzurichten, ist es meines Erachtens vielleicht besser, sich mit dem (weitaus mächtigeren) Fund vertraut zu machen.
amo-ej1
9
Während find für viele Dinge nützlich ist, muss es jedes Mal durch das Dateisystem gehen. Wenn Sie die Stellen, an denen Sie suchen, eingrenzen können, ist das in Ordnung. Der Vorteil von locate besteht darin, dass die eigene Datenbank beibehalten wird 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 16.02.10
1
Wenn Sie das erste Mal unter locateOS X arbeiten, werden Sie aufgefordert, das Programm auszuführen sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist.
Török Gábor
12
Je nachdem, wofür Sie etwas tun müssen locate, ist es möglicherweise bequemer, die Befehlszeilenschnittstelle von Spotlight zu verwenden, mdfindda die Spotlight-Datenbank fast immer auf dem neuesten Stand ist und viel mehr Funktionen bietet als locate. man mdfind
Paul R

Antworten:

327

Es ist locate.updatedbauf dem Mac.

sudo /usr/libexec/locate.updatedb

Weitere Informationen finden Sie in der Manpage locate.updatedb .

John T
quelle
9
Auf dieser manSeite heißt es auch: Sie wird normalerweise einmal pro Woche vom Job /System/Library/LaunchDaemons/com.apple.locate.plist ausgeführt. (Und man locateerzählt eines über dieses Skript: /usr/libexec/locate.updatedb Skript zum Aktualisieren der Lokalisierungsdatenbank )
Arjan
5
@Arjan: Es sollte einmal pro Woche ausgeführt werden, aber standardmäßig ist es deaktiviert und die Zeit, zu der es ausgeführt werden sollte, ist sonntags um 3 Uhr morgens (oder so ähnlich), was nicht wirklich nützlich ist :)
Studer
Unter Linux arbeite ich normalerweise mit sudo ionice -c3 updatedbdem updatedbBefehl, den I / O-Controller nett zu teilen (io nice), aber ich glaube nicht, dass dieser Befehl auf einem Mac verfügbar ist. Ich vermisse auch das -rreguläre Ausdrucks-Flag, das mit GNU locate verwendet werden kann, obwohl ich nicht sicher bin, ob ich Homebrew verwenden und das von @Grogs
cwd
3
Beispiel einer macosx-Alternative zu "locate (-r)" und "updatedb", die spotlight verwendet ("-i" natürlich optional): mdfind -name "mp4" | egrep -i "^ / Users. * Downloads /.* Stuff"
Michael
Wenn Sie keine Dateien finden, die Sie erwarten, beachten Sie diese relevante Einschränkung im Abschnitt BUGS der 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

Sie können sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbden updatedbBefehl verfügbar machen.

Igor Vigasin
quelle
Heh, ich habe das gerade als Kommentar gepostet. Dann hast du das gesagt. Ich denke, das ist ein netter kleiner Mod, den man machen kann. :)
James T Snell
3
oder alias in deinem .bash_profil
Jim Johnson
19

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

Dann musst du GNU lokalisieren und updaten.

updatedb funktioniert nicht ohne sudo.

Persönlich bevorzuge ich es jedoch, einen pro Benutzer zu haben; Wenn Sie Sudo andere Benutzer kennen die Namen / Speicherorte aller Ihrer Dateien.

Ich muss einen Cronjob ausführen:

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

Und in meinem .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"

Grogs
quelle
3
Das Installieren von Findutils unter OS X Mavericks gab mir einen gupdatedbBefehl, keinen updatedb. Leider gab mir dieser Befehl einen hier beschriebenen Fehler (auf den sich Ihre SO-Antwort bezieht). Letztendlich habe ich updatedbes LC_ALL=’C’ sudo updatedbals Workaround verstanden, aber ich weiß nicht, ob dies eine langfristige Lösung ist.
David Rivers
2
Fügen Sie /opt/local/libexec/gnubinam Anfang Ihres Pfads hinzu, ob die coreutilsund findutilsinstallierten von macportsmit ihren ursprünglichen Namen (und nicht mit ihren gvorab festgelegten Versionen) verfügbar sein sollen.
Ioannis Filippidis
2

Wenn Sie locate ausführen, ohne zuvor die Datenbank zu aktualisieren, haben Sie die Möglichkeit, den empfohlenen Weg des Betriebssystems anhand seiner Ausgabe zu ermitteln.

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 六四
quelle