Jaki jest odpowiednik komendy updatedb dla systemu Mac na Linuksa?

234

Jeśli chcę użyć locatepolecenia na komputerze z systemem Linux, zwykle uruchamiam sudo updatedbnajpierw, aby zaktualizować bazę danych. Mogę uruchomić locatepolecenie w systemie OS X 10.5, ale nie mogę znaleźć updatedb. Jaka jest odpowiednia aktualizacja dla komputera Mac?

Thierry Lam
źródło
Dobrze zaktualizowane i zlokalizowane to miłe rzeczy, ale wymagają regularnego uruchamiania updatedb (albo updatedb działa regularnie, a to spowalnia system w niewygodnych momentach lub lokalizuje pokazuje odniesienia do plików, których już nie ma). Myślę więc, że zamiast konfigurowania locate / updatedb lepiej być może zapoznać się z (o wiele potężniejszym) znaleziskiem.
amo-ej1,
9
Chociaż find jest przydatne do wielu rzeczy, za każdym razem musi przechodzić przez system plików. Jeśli możesz zawęzić miejsca, w których szukasz, nie ma sprawy. Zaletą lokalizacji jest to, że utrzymuje własną bazę danych, więc nie trzeba za każdym razem wyszukiwać. Jest to szczególnie ważne w przypadku dużych i / lub zdalnych systemów plików. Myślę, że każdy ma swoje miejsce.
KeithB
1
Przy pierwszym uruchomieniu locatena systemie OS X wyświetla polecenie uruchomienia sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist.
Török Gábor
12
W zależności od tego, czego potrzebujesz locate, może okazać się wygodniejsze korzystanie z interfejsu wiersza poleceń do Spotlight mdfind, ponieważ baza danych Spotlight jest prawie zawsze aktualna i oferuje znacznie więcej funkcji niż lokalizacja. man mdfind
Paul R

Odpowiedzi:

327

Jest locate.updatedbna Macu.

sudo /usr/libexec/locate.updatedb

Aby uzyskać więcej informacji, zobacz stronę podręcznika locate.updatedb .

John T.
źródło
9
Ta manstrona twierdzi również: Zwykle jest uruchamiana raz w tygodniu przez zadanie /System/Library/LaunchDaemons/com.apple.locate.plist. (I man locatemówi o tym skrypcie: /usr/libexec/locate.updatedb Skrypt do aktualizacji zlokalizowanej bazy danych )
Arjan 16'10
5
@Arjan: Powinien być uruchamiany raz w tygodniu, ale domyślnie jest wyłączony, a czas, w którym należy to zrobić, to 3 rano w niedziele (lub coś podobnego), co nie jest naprawdę przydatne :)
Studer
Na Linuksie zwykle uruchamiam, sudo ionice -c3 updatedbco każe updatedbładnie współdzielić kontroler we / wy (io nice), ale nie sądzę, że to polecenie jest dostępne na komputerze Mac. Brakuje mi także -rflagi wyrażenia regularnego, której można używać z lokalizacją GNU, chociaż nie jestem pewien, czy chcę użyć homebrew i zainstalować lokalizację GNU wspomnianą przez @Grogs
cwd
3
Przykładowa alternatywa dla macosxa dla „locate (-r)” i „updatedb”, która wykorzystuje reflektor (opcjonalnie „-i”): mdfind -name "mp4" | egrep -i "^ / Users. * Pobieranie /.* Rzeczy"
michael
Ponadto, jeśli nie znajdziesz plików, których oczekujesz, zwróć uwagę na to odpowiednie zastrzeżenie z sekcji BŁĘDY strony podręcznika : 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

Możesz zrobić, sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbaby updatedbpolecenie było dostępne.

Igor Vigasin
źródło
Heh, właśnie opublikowałem to jako komentarz .. Potem zobaczyłem, że to powiedziałeś. Myślę, że to fajny mały mod do zrobienia. :)
James T Snell
3
lub alias w pliku .bash_profile
Jim Johnson,
19

Osobiście właśnie zainstalowałem findutils (używam MacPorts lub Homebrew).

Następnie musisz zlokalizować i zaktualizować GNU.

updatedb nie będzie działać bez sudo.

Osobiście wolę jednak zlokalizować jednego użytkownika; jeśli będziesz sudo, inni użytkownicy będą znać nazwy / lokalizacje wszystkich twoich plików.

Mam zadanie crona do uruchomienia:

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

I w moim .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"

Grogowie
źródło
3
Findutils instalujący browar w OS X Mavericks dał mi gupdatedbpolecenie, a nie updatedbjedno. Niestety to polecenie dało mi błąd opisany tutaj (w którym znajduje się twoja odpowiedź SO). Ostatecznie ja aliasem updatedbdo LC_ALL=’C’ sudo updatedbjako obejście, ale nie wiem, czy jest to rozwiązanie długoterminowe.
David Rivers,
2
Dodaj /opt/local/libexec/gnubinna początku ścieżki, jeśli chcesz, aby coreutilsi findutilszainstalowane macportsbyły dostępne z oryginalnymi nazwami (a nie z ich gwersjami z prefiksem).
Ioannis Filippidis
2

Jeśli uruchomisz lokalizowanie bez uprzedniej aktualizacji bazy danych, masz szansę zobaczyć zalecany sposób działania systemu operacyjnego po danych wyjściowych.

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 六四
źródło