Pesquisando Arquivos no Linux – locate e find

Localizar um arquivo por linha de comando no Linux pode se mostrar uma tarefa complicada para usuários iniciantes. Por isso, vou fazer um resumo aqui que será o suficiente para resolver a necessidade da maioria das pessoas.

Files

Wildcards – Coringas

Coringas são expressões que podem ser usadas para substituir um determinado conjunto de caracteres em uma expressão pesquisada. Por exemplo, caso você queira localizar todos os arquivos de músicas MP3 no seu computador, basta utilizar o caractere “*” indicando “qualquer quantidade de caracteres” na expressão “*.mp3”. Assim, como resultado de sua pesquisa, apareceriam arquivos como “ABBA – Dancing Queen.mp3” ou “Beyoncé – Freakum Dress.mp3” – bem, pelo menos na minha pesquisa apareceriam!

Os coringas que você pode utilizar são esses:

.

Coringa Resultado Exemplo
? Substitui um único caractere A expressão “AB?” poderá corresponder a “ABC”, “ABD”, etc, mas não corresponderá a “ABCD” por conter mais do que 3 caracteres.
* Substitui qualquer sequência de caracteres A expressão “AB*” poderá corresponder a “ABC”, “ABD”,”ABCD”, “ABCDE”, etc.
[lista] Substitui qualquer caractere por um caractere que esteja na lista. “AB[abc]” localizará qualquer ocorrência de “AB” com mais um caractere que será “a”, “b” ou “c”
[!lista] Substitui qualquer caractere por um caractere que não esteja na lista. “AB[!c-m]” localizará qualquer ocorrência de “AB” com mais um caractere que não estará entre “c” e “m”.

O uso desses coringas ficará mais compreensível utilizando os comandos de busca de arquivos.

Comando locate

O comando locate realiza sua busca em um banco de dados de arquivos e diretórios do seu sistema, retornando todos os resultados com a sequência de caracteres informada, o que pode resultar em uma lista imensa.

No exemplo a seguir, eu criei diversos arquivos de teste e vou localizá-los pelo comando locate.

Linux comando locate

Repare que o resultado retornado para locate CodeJacTest é o endereço completo e absoluto do arquivo (/home/jac/CodeJac/CodeJacTest2.txt). Isso porque o banco de dados pesquisa a expressão informada diretamente no endereço do arquivo – e não em seu nome.

Quando utilizamos o comando locate JacTest* ele retorna o mesmo resultado de locate "*/JacTest*, ou seja, ele pesquisa por arquivos cujo nome inicia no argumento informado. Já para pesquisar todos os arquivos que tenham em seu nome “JacTest”, não importando se no início, meio ou fim, basta utilizar locate *JacTest*, que é a forma explícita de locate JacTest.

Linux comando locate

Para finalizar, criei um arquivo novo no sistema (JacTest6.html) e vou tentar localizá-lo.

Linux - locate

Minha primeira tentativa de localizar o arquivo foi falha, pois este foi recém criado e o banco de dado não tinha sido atualizado. Para resolver o problema, bastou atualizar o banco pelo comando sudo updatedb.

 

Comando find

Embora pareça mais complexo, o comando find é bem mais utilizado. Diferentemente do locatefind busca diretamente na árvore do sistema de arquivos – o que pode resultar em pesquisar mais lentas, porém atualizadas em comparação com locate.

Quando não são passados argumentos, o comando lista todos os arquivos no diretório atual e subdiretórios. Algumas opções ajudam a refinar a busca, como:

-name
Pesquisando por arquivos e diretórios com o nome xx
$ find /usr -name xx

Linux - Find 01

-type
Pesquisando por diretórios a partir de $HOME com o nome xx
$ find ~/ -type d -name xx

Linux - Find 02

Localizando com Base no Tempo e Tamanho

-ctime
Essa opção indica quando os meta-dados do arquivo foram alterados pela última vez, o que acontece normalmente, mas não necessariamente, quando o arquivo foi criado. É possível localizar também por última data de acesso (-atime) ou data da última modificação (-mtime). O número (n) que segue após a opção é dado em dias, podendo ser o valor exato ou maior que n (+n) ou menor que n (-n). Há opções similares para o tempo dado em minutos (como em -cmin,-amin e -mmin).

Linux - Find 03

Localizando arquivos e diretórios cujos meta-dados foram alterados a menos de 60min.

-size
Aqui o valor informado corresponde a blocos de 512 bytes, mas você pode especificar esse número em bytes(c), kilobytes(c), megabytes (M) e gigabytes(G). Assim como na pesquisa por tempo, o tamanho pode ser exato (n), maior que (+n) ou menor que (-n).

Linux - Find 04

Localizando arquivos no diretório CodeJac/ com mais de 100MB.

Usando Opções Avançadas do Comando find

Algumas vezes você desejará executar comandos com os arquivos localizados. Para isso, utilize a opção -exec.

Removendo todos os arquivos que terminam com a extensão .swp:
$ find -name "*.swp" -exec rm {} ';'

Linux - Find 05

Removendo todos os arquivos .html do diretório atual.

Outra boa opção também pode ser -ok, opção que se comporta como o -exec exceto que find vai solicitar sua confirmação antes de executar o comando. Essa é uma boa forma de garantir o resultado do seu comando.

Linux - Find 06

Removendo todos os arquivos .txt com confirmação de exclusão.

Espero ter ajudado com esse resumo. Qualquer dúvida, deixe nos comentários!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: