Qual è l'equivalente del comando Linux aggiornato per Mac?


234

Se voglio usare il locatecomando su una macchina Linux, di solito eseguo sudo updatedbprima di aggiornare il database. Posso eseguire il locatecomando su OS X 10.5 ma non riesco a trovarlo updatedb. Qual è l'aggiornamentob corrispondente per il mac?


Ben aggiornato e individuare sono cose carine, ma richiedono di eseguire updateb regolarmente (o updateb viene eseguito regolarmente e questo rallenta il sistema in momenti scomodi, oppure individuare mostra riferimenti a file che non sono più presenti). Quindi penso che invece di impostare individuare / aggiornatob sarebbe forse meglio familiarizzare con (la ricerca molto più potente).
amo-ej1,

9
Sebbene find sia utile per molte cose, deve sempre passare attraverso il filesystem. Se riesci a restringere i luoghi in cui stai guardando, va bene. Il vantaggio di individuare è che mantiene il proprio database e quindi non è necessario cercare ogni volta. Ciò è particolarmente importante con filesystem di grandi dimensioni e / o remoti. Penso che ognuno abbia il suo posto.
KeithB,

1
Quando si esegue per la prima volta locatesu una casella OS X, viene richiesto di eseguire sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist.
Török Gábor,

12
A seconda di cosa è necessario utilizzare locate, potrebbe essere più comodo utilizzare l'interfaccia della riga di comando su Spotlight mdfind, poiché il database Spotlight è quasi sempre aggiornato e offre molte più funzionalità rispetto a individuare. man mdfind
Paul R,

Risposte:


327

È locate.updatedbsu Mac.

sudo /usr/libexec/locate.updatedb

Per ulteriori informazioni, consultare la pagina man Locate.updatedb .


9
Quella manpagina afferma anche: in genere viene eseguita una volta alla settimana dal lavoro /System/Library/LaunchDaemons/com.apple.locate.plist. (E man locateracconta uno di quello script: /usr/libexec/locate.updatedb Script per aggiornare il database di individuazione )
Arjan

5
@Arjan: dovrebbe essere eseguito una volta alla settimana, ma il valore predefinito è disabilitato e l'orario in cui dovrebbe essere fatto è alle 3 di domenica (o qualcosa di simile), il che non è molto utile :)
Studer

Su Linux di solito corro, il sudo ionice -c3 updatedbche mi dice updatedbdi condividere bene il controller di I / O (io bello) ma non credo che questo comando sia disponibile su Mac. Mi manca anche avere il -rflag di espressione regolare che può essere usato con GNU Locate, anche se non sono sicuro di voler usare homebrew e installare GNU Locate menzionato da @Grogs
cwd

3
Esempio di macosx alternativo a "individuare (-r)" e "aggiornatob" che utilizza spotlight ("-i" opzionale ovviamente): mdfind -name "mp4" | egrep -i "^ / Users. * Download /.* Stuff"
michael

Inoltre, se non trovi i file che ti aspetti, nota questo avvertimento rilevante dalla sezione BUGS della 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

Puoi fare sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbper rendere updatedbdisponibile il comando.


Heh, l'ho appena pubblicato come commento .. Poi ho visto che l'hai detto. Penso che questa sia una piccola mod piacevole da realizzare. :)
James T Snell,

3
o alias nel tuo .bash_profile
Jim Johnson,

19

Personalmente, ho appena installato findutils (usare MacPorts o Homebrew).

Quindi hai GNU individuare e aggiornatob.

updatedb non funzionerà senza sudo.

Personalmente preferisco comunque avere un utente per utente; se sudo altri utenti conosceranno i nomi / le posizioni di tutti i tuoi file.

Ho un cron job da eseguire:

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

E nel mio .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"


3
Le istruzioni per l'installazione di Brew su OS X Mavericks mi hanno dato un gupdatedbcomando, non updatedbuno. Purtroppo questo comando mi ha dato un errore descritto qui (dove si fa riferimento alla tua risposta SO). In definitiva ho alias updatedbad LC_ALL=’C’ sudo updatedbuna soluzione, ma non so se questa è una soluzione a lungo termine.
David Rivers,

2
Aggiungi /opt/local/libexec/gnubinall'inizio del tuo percorso, se vuoi che coreutilssia findutilsinstallato da macportssia disponibile con i loro nomi originali (e non con le loro gversioni prefissate).
Ioannis Filippidis,

2

Se esegui individuare senza prima aggiornare il database, hai la possibilità di vedere il modo raccomandato dal sistema operativo dal suo output.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.