Qual é o equivalente ao comando updatedb do Linux para o Mac?

234

Se eu quiser usar o locatecomando em uma máquina Linux, geralmente corro sudo updatedbprimeiro para atualizar o banco de dados. Eu posso executar o locatecomando no OS X 10.5, mas não consigo encontrar updatedb. Qual é o updateb correspondente para o mac?

Thierry Lam
fonte
Bem atualizados e localizar são coisas boas, mas eles precisam ser atualizados regularmente (o updatedb é executado regularmente e isso torna o sistema lento em momentos inconvenientes, ou localize mostra referências a arquivos que não existem mais). Então, acho que, em vez de configurar o local / atualizadob, talvez seja melhor se familiarizar com a descoberta (a mais poderosa).
amo-EJ1
9
Embora find seja útil para muitas coisas, ele precisa passar pelo sistema de arquivos toda vez. Se você pode restringir os lugares para onde está procurando, tudo bem. A vantagem da localização é que mantém seu próprio banco de dados e, portanto, não é necessário pesquisar todas as vezes. Isso é especialmente importante em sistemas de arquivos grandes e / ou remotos. Eu acho que cada um tem seu lugar.
KeithB
1
Quando executado locatepela primeira vez em uma caixa do OS X, ele diz para você executar sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist.
Török Gábor
12
Dependendo do que você precisa usar locate, talvez seja mais conveniente usar a interface da linha de comandos para o Spotlight mdfind, pois o banco de dados do Spotlight está quase sempre atualizado e oferece muito mais funcionalidade do que a localização. man mdfind
Paul R

Respostas:

327

Está locate.updatedbno Mac.

sudo /usr/libexec/locate.updatedb

Para obter mais informações, consulte a página do manual find.updatedb .

John T
fonte
9
Essa manpágina também afirma: Normalmente, é executada uma vez por semana pelo trabalho /System/Library/LaunchDaemons/com.apple.locate.plist. (E man locatediz um sobre esse script: /usr/libexec/locate.updatedb Script para atualizar o banco de dados localizar )
Arjan
5
@ Arjan: Ele deve ser executado uma vez por semana, mas o padrão é desativado e o momento em que deve ser feito é 03:00 aos domingos (ou algo similar), o que não é realmente útil :)
Studer
No linux, costumo executar o sudo ionice -c3 updatedbque diz updatedbpara compartilhar bem o controlador de E / S (io nice), mas não acho que esse comando esteja disponível no mac. Eu também sinto falta de ter a -rbandeira de expressão regular que pode ser usado com o GNU localizar, embora eu não tenho certeza se quero usar homebrew e instalar o GNU localizar mencionado por @Grogs
CWD
3
Exemplo de alternativa macosx para "localize (-r)" e "updatedb" que usa o spotlight ("-i" opcional, é claro): mdfind -name "mp4" | egrep -i "^ / Users. * Downloads /.* Stuff"
michael
Além disso, se você não encontrar arquivos que você espera, note que este ressalva relevantes da seção os erros da 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

Você pode fazer sudo ln -s /usr/libexec/locate.updatedb /usr/local/bin/updatedbpara disponibilizar o updatedbcomando.

Igor Vigasin
fonte
Heh, eu acabei de postar isso como um comentário .. Então vi você dizer isso. Eu acho que esse é um modzinho legal de se fazer. :)
James T Snell
3
ou pseudónimo-lo em seu .bash_profile
Jim Johnson
19

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

Então você tem a localização e atualização do GNUb.

updatedb não funcionará sem o sudo.

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

Eu tenho um trabalho cron para executar:

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

E no meu .zshrc .bashrc / .bashprofile:

export LOCATE_PATH="~/tmp/locatedb"

Grogs
fonte
3
A instalação de brew findutils no OS X Mavericks me deu um gupdatedbcomando, não updatedbum. Infelizmente, este comando me deu um erro descrito aqui (onde sua resposta ao SO é referenciada). Em última análise, eu alias updatedba LC_ALL=’C’ sudo updatedbcomo uma solução, mas eu não sei se esta é uma solução a longo prazo.
David Rivers
2
Adicione /opt/local/libexec/gnubinno início do seu caminho, se você quiser que o coreutilse findutilsinstalado macportsesteja disponível com seus nomes originais (e não com suas gversões pré-fixadas).
Ioannis Filippidis
2

Se você executar o local sem primeiro atualizar o banco de dados, terá a chance de ver o caminho recomendado pelo sistema operacional pela 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
Tankman 六四
fonte