Como localizar arquivos via Terminal no Mac?
O leitor Anderson O. S. perguntou por e-mail:
Embora minha experiência maior seja com Windows, migrei para o Mac após alguns meses como usuário de Linux, onde acabei desenvolvendo a afeição pela shell. A maioria dos comandos que aprendi no curso de Linux funciona igualmente no Terminal do Mac, mas tem um que não funciona e me faz falta: o locate, que permitia procurar arquivos bem mais rápido do que pelo find, bastando colocar no parâmetro uma palavra que seria procurada nos nomes dos arquivos. Mas no Mac o locate só me mostra uma mensagem de erro. Tem como ativá-lo, ou preciso mesmo sair do Terminal e ir para o Spotlight sempre que não quiser esperar o processamento do find?
Anderson, antes de prosseguir, vale a pena destacar que o find, que você aponta como lento, não faz a mesma coisa que o locate e o Spotlight: estes 2 últimos fazem suas pesquisas a partir de uma base de dados previamente produzida e indexada, descrevendo o que está armazenado no seu computador, enquanto o primeiro de fato percorre, a cada vez que você o chama, as árvores de diretórios em busca do que você o mandou procurar. É natural, portanto, que haja profunda diferença de velocidade entre eles na hora de produzir respostas.
Quanto à sua pergunta, há sim como ativar o funcionamento do comando locate no seu Terminal – e o comando necessário para isso é mencionado na própria mensagem de erro que é exibida quando você tenta usá-lo em um Mac onde ele ainda não foi habilitado.
Mas como você aparentemente não está insatisfeito com os resultados do Spotlight, mas só com o fato de ter de sair do Terminal para usá-lo, há algo melhor que você pode fazer, evitando criar uma base de dados adicional de pesquisa para poder usar o locate: fazer buscas do Spotlight diretamente no Terminal.
Para isso, no lugar do comando locate, você deve usar o mdfind, como no exemplo a seguir:
mdfind pinhead
/Users/augusto/Music/iTunes/iTunes Music/Ramones/Loco Live/27 Pinhead.mp3
/Users/augusto/Music/iTunes/iTunes Music/Ramones/Greatest Hits/Pinhead.mp3
/Users/augusto/Music/iTunes/iTunes Music/Compilations/Todos Somos Ramones/Pinhead.mp3
Note que eu usei o comando mdfind pinhead e recebi, tão imediatamente quanto receberia o resultado de um locate numa distribuição popular de Linux, o caminho completo de 3 arquivos com esta palavra no nome – idêntico à forma básica do uso do locate que você descreveu no seu e-mail.
Mas há algumas diferenças entre o mdfind e o locate, especialmente porque o primeiro não pesquisa com base apenas no nome dos arquivos, mas sim em todos os metadados que o Mac OS X pode guardar sobre os arquivos, tais como nome do autor, título, resumo e muitos outros.
Geralmente esta diferença é desejada e funciona a seu favor, mas se você quiser forçar uma busca baseada apenas nos trechos do nome do arquivo, a sintaxe passa a ser um pouquinho diferente, e a pesquisa deixa de ser instantânea. Um exemplo que faria a mesma busca acima:
mdfind "kMDItemFSName = *pinhead*"
Você pode até aproveitar um pouco mais das suas aulas de Linux para um exercício adicional: criar um alias no terminal facilitando o uso deste parâmetro, que não é fácil de decorar – ou recorrer ao man mdfind para descobrir várias formas de restringir o escopo das buscas como preferir! Mas minha sugestão é usar o comando sem parâmetros adicionais (além da expressão a ser pesquisada, naturalmente), como faria com o locate.
E já que você tem interesse em levar ao Terminal comportamentos do desktop gráfico do Mac OS X, recomendo mais 2 artigos do BR-Mac:
- Manipulando a clipboard no seu script shell ou no Terminal
- Comando open: unindo o melhor de 2 mundos no Terminal do Mac
E boa transição ao Mac!
Comentar
Comentários arquivados