Frage Was entspricht dem Linux-Befehl updatedb für den Mac?


Wenn ich das benutzen möchte locate Befehl auf einem Linux-Rechner laufe ich normalerweise sudo updatedb zuerst um die Datenbank zu aktualisieren. Ich kann rennen locate Befehl auf OS X 10.5, aber ich kann nicht finden updatedb. Was ist das entsprechende updatedb für den Mac?


215
2018-02-16 15:23


Ursprung


Gut upatedb und locate sind nette Dinge, aber sie müssen regelmäßig updatedb (entweder updatedb läuft regelmäßig und das verlangsamt Ihr System zu unpassenden Zeiten, oder suchen zeigt Referenzen auf Dateien, die nicht mehr da sind). Daher denke ich, dass es besser wäre, sich mit dem (weitaus leistungsfähigeren) Fund vertraut zu machen, anstatt locate / updated einzurichten. - amo-ej1
Während find für viele Dinge nützlich ist, muss es jedes Mal durch das Dateisystem gehen. Wenn Sie die Orte, an denen Sie suchen, eingrenzen können, ist das in Ordnung. Der Vorteil von locate besteht darin, dass es seine eigene Datenbank behält und nicht jedes Mal suchen muss. Dies ist besonders wichtig bei großen und / oder entfernten Dateisystemen. Ich denke, dass jeder seinen Platz hat. - KeithB
Beim ersten Lauf locate Auf einer OS X-Box sagt es Ihnen zu laufen sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist. - Török Gábor
Abhängig davon, was Sie verwenden müssen locate für, Sie könnten es bequemer finden, die Befehlszeilenschnittstelle zu Spotlight zu verwenden, mdfind, da die Spotlight-Datenbank fast immer auf dem neuesten Stand ist und viel mehr Funktionen bietet als locate. man mdfind - Paul R


Antworten:


Es ist locate.updatedb auf Mac.

sudo /usr/libexec/locate.updatedb

Weitere Informationen finden Sie unter locate.updatedb Manpage.


305
2018-02-16 15:27



Das man Seite behauptet auch: Es 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 Locate-Datenbank) - Arjan
@Arjan: Es sollte einmal pro Woche laufen, aber die Standardeinstellung ist deaktiviert und die Zeit, wenn es getan werden sollte ist 3 Uhr am Sonntag (oder etwas ähnliches), was nicht wirklich nützlich ist :) - Studer
Auf Linux laufe ich normalerweise sudo ionice -c3 updatedb was sagt updatedb den i / o-Controller schön zu teilen (io nett), aber ich denke nicht, dass dieser Befehl auf Mac verfügbar ist. Ich vermisse auch das -r Flag für reguläre Ausdrücke, das mit dem 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
Beispiel macosx Alternative zu "locate (-r)" und "updatedb" die Spotlight verwendet ("-i" optional natürlich): mdfind -name "mp4" | egrep -i "^ / Benutzer. * Downloads /.* Sachen" - michael
Auch wenn Sie nicht Finden Sie Dateien, die Sie erwarten, beachten Sie diesen relevanten Vorbehalt aus dem 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


Du kannst tun sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb das machen updatedb Befehl verfügbar.


80
2017-10-18 22:29



Heh, ich habe das gerade als Kommentar gepostet. Dann sah ich, dass du das gesagt hast. Ich denke, das ist eine nette kleine Mod zu machen. :) - James T Snell
oder alias es in Ihrem .bash_profile - Jim Johnson


Persönlich habe ich gerade findutils installiert (benutze MacPorts oder Homebrew).

Dann haben Sie GNU suchen und aktualisiertb.

updatedb wird ohne sudo nicht funktionieren.

Persönlich bevorzuge ich eine pro Benutzer locatedb obwohl; Wenn Sie sudo, werden andere Benutzer die Namen / Speicherorte all Ihrer Dateien kennen.

Ich habe einen Cron-Job:

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

Und in meiner .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"


19
2017-12-04 02:27



Die Installierung von Findutils auf OS X Mavericks gab mir ein gupdatedb Befehl, nicht ein updatedb ein. Leider hat mir dieser Befehl gegeben ein hier beschriebener Fehler (Auf Ihre SO-Antwort wird verwiesen). Letztendlich habe ich Alias updatedb zu LC_ALL=’C’ sudo updatedb als Workaround, aber ich weiß nicht, ob dies eine langfristige Lösung ist. - David Rivers
Hinzufügen /opt/local/libexec/gnubin am Anfang deines Weges, wenn du willst coreutils und findutils installiert von macports mit ihren ursprünglichen Namen verfügbar sein (und nicht ihre g-prefixed Versionen). - Ioannis Filippidis


Wenn Sie locate ausführen, ohne zuerst die Datenbank zu aktualisieren, haben Sie die Möglichkeit, die empfohlene Vorgehensweise des Betriebssystems anhand seiner Ausgabe anzuzeigen.

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

2
2017-08-15 09:09