Procurando arquivos no Linux
Introdução: procurando arquivos no Linux
Para buscar um arquivo utilizando o terminal, basta pedir para ele procurar (find), em todo meu sistema(/), algo que contenha o nome (-name) que queremos.
Preciso desses arquivos rápido e tenho apenas o terminal em mãos…
Usando o find para achar arquivos
Eu sei que o nome dos arquivos contém pagamentos
então é só acrescentá-lo ao comando.
find / -name pagamentos
Conseguimos localizar alguns arquivos, mas nenhum desses é o arquivo que quero ainda…
O arquivo que eu quero tem uma extensão CSV. Então vamos informar isso ao find
find / -name pagamentos.csv
Legal resolvemos nosso problema! Mas ainda tem um detalhe… Lembro que não tinha apenas um arquivo de pagamentos no servidor. Por que ele não apareceu?
Será que é porque está escrito com letras maiúsculas?
O programa find
diferencia letras maiúscula e minúsculas, ou seja, ele é case-sensitive.
Nesse contexto, existem algumas complicações que podem ocorrer, como:
Início da palavra com letra maiúscula: Pagamentos.txt;
Início da palavra com letra minúscula: pagamentos.txt;
Letras maiúsculas no meio da palavra: pAgAmenTos.txt.
Como faço para que o find
os liste para mim?
Ignorando a caixa alta
Para que não considere se é maiúscula ou minúscula, temos que falar para o find
ignorá-las. Então, basta colocar o parâmetro i
antes do name
. Ficando, assim:
find / -iname pagamentos.csv
Vamos testar nosso comando e ver se ele retorna nossos três arquivos:
Legal! Agora conseguimos ver dois arquivos. Mas ainda tem mais arquivos que contém pagamento no nome… Por que não estão aparecendo? Existe alguma maneira de listá-los?
Sim! Para isso vamos utilizar algumas expressões regulares que indicarão para o programa essa situação.
Mas quais são essas expressões?
Buscando com apenas uma parte do nome
Bom, sabemos que o nome do arquivo contém a palavra pagamento. Então eu tenho que dizer para o find
, "por favor, procure para mim em todo meu sistema(/
), sem se importar com o maiúsculas e minúsculas (-iname
), o arquivo que comece com pagamento*
seguido de qualquer coisa".
O asterisco indica que o nome pode ser seguido de qualquer coisa, sejam espaços em branco, outras palavras, letras, números …
Viram? A nossa busca retornou tanto os arquivos quanto diretórios que continham essa parte da busca no nome.
E o mais legal, a gente pode usar o asterisco onde quisermos na busca. Antes da palavra começar, por exemplo. Reparem nessa pesquisa:
find -iname *pagamento*
Dessa forma conseguimos obter todas as combinações com a nossa string de busca.
Além do asterisco, você pode usar outras expressões regulares como ?
, [a-z]
ou aquelas que você mais necessita na hora.
Tudo bem, até o momento aprendemos a buscar arquivos em todo o sistema. Mas e quando queremos realizar uma busca em um determinado lugar como, por exemplo, uma pasta? Se eu quisesse buscar somente os arquivos do diretório financeiro, como posso fazer?
Buscando em um diretório específico
Da mesma maneira que pedimos para o find
procurar arquivos em todo o meu sistema, podemos especificar uma pasta específica e ele buscaria apenas os arquivos desse diretório.
Bem, queremos que todos os arquivos de pagamento que estão na pasta financeiro
, logo vamos dizer isso para o find
informando o caminho até o diretório.
find /compartilhamento/financeiro -iname *pagamento*
Conseguimos todos os resultados que contém "pagamento" como parte do nome.
Esse tipo de consulta é importante, pois caso o computador tenha muitos arquivos, o programa não precisará ver em todos os locais possíveis no sistema, somente na pasta indicada. Isso otimiza o tempo de retorno da busca, já que o programa não terá que varrer todo sistema.
"Legal! Conseguimos buscar arquivos em todo o sistema, mas só o find que faz isso, ou existe algum outro?"
Além do find
, temos outro programa que realiza busca nos sistemas, o locate
.
Buscando arquivos com Locate
O uso do locate é parecido com o do find
. Precisamos informar para nosso sistema localizar (locate
) um arquivo com o nome que queremos. Por exemplo: pagamentos
locate pagamentos
Pronto! Temos a localização do nosso arquivo. O Locate, portanto, assim como o find
, é outro programa utilizado para fazer buscas no sistema. Contudo ele retorna as buscas um pouco mais rápido que o segundo. Isso porque ele faz a busca em um banco de dados próprio.
Ou seja, quando o locate
é usado para fazer uma pesquisa ele procura em seu catálogo(banco de dados) e nos mostra os resultados. Ao contrário do find
que faz uma varredura em todo o sistema buscando o arquivo.
Repararam que utilizando o locate
apareceram outros resultados que continham pagamentos
no nome? Isso acontece, pois por padrão o locate
já usa asteriscos no começo e no fim da string de busca, procurando em todos os lugares onde a palavra se encontra.
Esse comando equivale a find / -name *pagamentos*
:
A saída é a mesma, apenas em uma ordem diferente.
Também podemos ignorar (-i
) se as letras estão em caixa alta ou baixa.
locate -i pagamentos
E novamente ele nos retornou a localização de nosso arquivo, não apenas de um, mas de todos que continham a string de busca no nome.
Agora, que tal fazer um teste? Vamos criar um arquivo de texto comum em qualquer lugar chamado teste.txt
. Depois usar o locate
para tentar localizá-lo.
locate teste
Hum… o resultado que esperávamos não está aparecendo. Por quê?
Entendendo o banco de dados do locate
Vimos que o locate faz uso de um banco de dados para realizar suas pesquisas, porém quando criamos um arquivo ele não é automaticamente inserido no banco de dados sendo necessário atualizá-lo.
Para que o banco de dados seja atualizado temos que utilizar o comando updatedb
. Para isso devemos estar logados como root, ou utilizar sudo
na frente do comando
Assim, se fizermos novamente a busca ela já retornará o nosso arquivo:
Com isso nosso banco foi atualizado e obtivemos o resultado esperado.
Conclusão
Queria localizar um arquivo no servidor que não tinha modo gráfico. Vimos como podemos procurar nossos arquivos no terminal, utilizando o nome do arquivo, ou parte do nome, em uma pasta ou em todo o sistema.
Para isso, existem alguns programas, como o find
e o locate
. Vimos como utilizar cada um, seu funcionamento e suas diferenças.
Gosta de Linux? Aqui na Alura temos uma formação completa sobre ele. Nela você aprenderá sobre o sistema, como utilizar o terminal para fazer suas tarefas, sobre a filosofia Open Source, além de muito mais coisas para você dominar esse sistema operacional.