Questão Qual é o equivalente do comando updatedb do Linux para o Mac?


Se eu quiser usar o locate comando em uma máquina Linux, eu geralmente corro sudo updatedb primeiro para atualizar o banco de dados. Posso correr o locate comando no OS X 10.5, mas não consigo encontrar updatedb. Qual é o updatedb correspondente para o mac?


215


origem


Bem upatedb e localize são coisas agradáveis ​​mas eles exigem correr updatedb regularmente (ou updatedb roda regularmente e isto retarda seu sistema a tempos inconvenientes ou localiza mostras referências a arquivos que não estão mais lá). Então, acho que, em vez de configurar o locate / updatedb, talvez seja melhor se familiarizar com o (muito mais poderoso) achado. - amo-ej1
Embora o find seja útil para muitas coisas, ele precisa passar pelo sistema de arquivos a cada vez. Se você puder restringir os lugares onde você está olhando, tudo bem. A vantagem do locate é que mantém seu próprio banco de dados e, portanto, não precisa pesquisar todas as vezes. Isso é especialmente importante em sistemas de arquivos grandes e / ou remotos. Eu acho que cada um tem o seu lugar. - KeithB
Quando primeiro correndo locate em uma caixa do OS X diz-lhe para executar sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist. - Török Gábor
Dependendo do que você precisa usar locate para, você pode achar mais conveniente usar a interface de linha de comando para o Spotlight, mdfind, já que o banco de dados Spotlight está quase sempre atualizado e oferece muito mais funcionalidade do que a localização. man mdfind - Paul R


Respostas:


Está locate.updatedb no Mac.

sudo /usr/libexec/locate.updatedb

Para mais informações, consulte o Página do manual locate.updatedb.


305



que man página também afirma: Normalmente, ele é executado uma vez por semana pelo trabalho /System/Library/LaunchDaemons/com.apple.locate.plist. (E man locate conta um sobre esse script: Script /usr/libexec/locate.updatedb para atualizar o banco de dados de localização) - Arjan
@Arjan: Deve ser executado uma vez por semana, mas o padrão é desativado e o horário em que deve ser feito é às 3 da manhã aos domingos (ou algo similar), o que não é realmente útil :) - Studer
No linux eu geralmente corro sudo ionice -c3 updatedb que conta updatedb para compartilhar o controlador de i / o bem (io nice), mas eu não acho que este comando está disponível no mac. Eu também sinto falta de ter o -r flag de expressão regular que pode ser usado com o GNU locate, embora eu não tenha certeza se eu quero usar homebrew e instalar o GNU locate mencionado por @Grogs - cwd
Exemplo macosx alternativa para "locate (-r)" e "updatedb" que usa spotlight ("-i" opcional claro): mdfind -name "mp4" | egrep -i "^ / Usuários. * Downloads /.*" - michael
Além disso, se você não faça encontrar arquivos que você espera, observe esta advertência relevante da seção BUGS do 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


Você pode fazer sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedb para tornar o updatedb comando disponível.


79



Heh, acabei de postar isso como um comentário .. Então vi que você disse isso. Eu acho que isso é um pequeno mod para fazer. :) - James T Snell
ou alias em seu .bash_profile - Jim Johnson


Pessoalmente, acabei de instalar os findutils (use MacPorts ou Homebrew).

Então você tem o GNU locate e updatedb.

O updatedb não funciona sem o sudo.

Pessoalmente eu prefiro ter um usuário localizado embora; Se você sudo outros usuários saberão os nomes / locais de todos os seus arquivos.

Eu tenho um cron job para executar:

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

E no meu .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"


19



Brew-instalando findutils no OS X Mavericks me deu um gupdatedb comando, não um updatedb 1. Infelizmente este comando me deu um erro descrito aqui (onde sua resposta SO é referenciada). Ultimamente eu tenho um alias updatedb para LC_ALL=’C’ sudo updatedb como uma solução alternativa, mas não sei se esta é uma solução de longo prazo. - David Rivers
Adicionar /opt/local/libexec/gnubin no início do seu caminho, se você quiser coreutils e findutils instalado por macports estar disponível com seus nomes originais (e não seus gversões pré-fixadas). - Ioannis Filippidis


Se você executar o locate sem primeiro atualizar o banco de dados, terá a chance de ver o caminho recomendado pelo sistema operacional por sua saída.

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