Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom

Bar]
[Photo of the Author]
Guido Socher

Sobre o autor: Adora o Linux porque é um sistema grátis e é também muito divertido trabalhar com as pessoas da comunidade Linux ao redor do mundo. Passa seu tempo livre com sua namorada, ouve a rádio BBC World Service, passeia em sua bicicleta pelo campo e gosta de brincar com o Linux.

Escreva para o autor

Índice:
Encontrando arquivos pelo nome
Uma visão geral
Encontrando arquivos pelo conteúdo

Encontrando arquivos

[Illustration]

Sumário: Este artigo dá uma introdução sobre como encontrar arquivos pelo nome e pelo conteúdo.



Encontrando arquivos pelo nome

Provavelmente você deve se lembrar deste problema: você tem algum tipo de arquivo e não se lembra de onde o colocou.

É aqui onde o comando find se torna útil. Como usá-lo ? find vem, naturalmente, com uma grande página no man, mas vamos apenas olhar alguns "casos normais". Para percorrer a árvore de diretórios que começa com o diretório atual e procurar por uma arquivo chamado lostfile.txt:

find . -name lostfile.txt -print

find aceita também "coringas". Lembre-se de colocar entre aspas os coringas, senão o shell tentará expandi-los antes de passá-lo para o find. Aqui está um exemplo:

find . -name "lost*" -print

Este comando pode ser muito lento quando você precisa procurar em uma árvore grande de diretórios. Aqui o comando locate pode ajudar. Ele não procura, realmente, por um arquivo no sistema de arquivos diretamente. Ele procura em uma base de dados. Isto é muito mais rápido, mas a base de dados pode estar desatualizada. Em algumas distribuições a base de dados do locate é atualizada a cada noite, mas você pode naturalmente executar o comando updatedb manualmente de tempos em tempos a fim de atualizar a base de dados. locate faz buscas de substrings.

locate lostfile

Isto localizará os arquivos lostfile.txt ou mylostfile.txt etc....

Até agora nós estávamos procurando por arquivos cujos nomes nós sabemos. Talvez o nome do arquivo não seja lostfile.txt, mas lastfile.txt, ou leastfile.txt, ou lostfiles.txt, ou Lotsfile.txt, ou lostfile.text e você não consegue lembrar o nome exatamente. Como você pode ainda assim encontrar o arquivo ? Neste caso você poderia usar um utilitário para buscas de arquivo tolerante a falhas chamado ftff. ftff procura por arquivos e permite um número de "erros por substituição". Este comando encontraria todo estes nomes de arquivos ligeiramente "errados":

ftff lostfiles.txt

O número de erros de substituição permitidos depende do tamanho do arquivo mas pode também ser explicitado com a opção -t. Para permitir um máximo de 2 erros e para usar também um coringa, apenas digite:

ftff -t2 "lostfiles*"

Ftff é um programa de minha própria autoria e é parte de um pacote chamado whichman-1.4, que pode ser conseguido em

sunsite.unc.edu/pub/Linux/apps/doctools/whichman-1.4.tar.gz

Algumas vezes você gostaria de encontrar todas os arquivos na árvore de diretórios que não contêm uma determinada string. Por exemplo, todos os arquivos exceto aqueles com extensão .o e .c . Aqui estão algumas das possibilidades para fazê-lo:

find . ! -name "*.o" ! -name "*.c" -print
find . -print | fgrep -v '.o' | fgrep -v '.c'
se você tiver a versão gnu do find:
find | fgrep -v '.o' | fgrep -v '.c'
find | egrep -v '\.[oc]'

Uma visão geral do sistema de arquivos

Às vezes você gostaria de ter uma visão geral do sistema de arquivos que está na sua frente. Por exemplo, você arranjou um CD novo e gostaria de ver o que tem nele. Você poderia apenas usar ls - R. Pessoalmente eu prefiro, por legibilidade, um dos seguintes. tree ( sunsite.unc.edu/pub/Linux/utils/file/tree-1.2.tgz ) desenha um diagrama da árvore.

tree
ou com nomes de arquivos longos:
tree -fF

Há naturalmente o bom e velho find. A versão gnu do find, que vem geralmente com Linux, tem também a possibilidade de mudar o formato da saída, para mostrarmos, por exemplo, o tamanho do arquivo com o nome:

find . -ls
find . -print
ou com find gnu:
find
find . -printf "%7s %p\n"

Há também um pequeno wrapper em Perl para o comando ls que faz coisas similares. Pode ser conseguido aqui: lsperl.gz. Você pode provavelmente encontrar muito mais ferramentas para vasculhar arquivos mas estas são mais do que suficientes para a maioria de casos .

Encontrando arquivos pelo conteúdo (procurando por strings de texto nos arquivos)

Os utilitários padrão para procurar strings de texto nos arquivos são grep/egrep, para pesquisas com expressões regulares, e o fgrep, para procurar por strings literais. Para procurar por uma expressão em todas os arquivos no diretório atual, apenas digite:

egrep -i "expressao de busca" *

Para procurar por strings em todas os arquivos dentro da árvore de diretórios, você pode combinar o find ou outros comandos da busca de nome de arquivos com, por exemplo, o egrep. Isto pode ser feito de diversas maneiras:

egrep -i "expressao" `find . -type f -print`
find . -type f -exec egrep -i "expressao" /dev/null {} \;
find . -type f -print | xargs egrep -i "expressao"

Se você achar isto difícil de lembrar, então você pode apenas usar um pequeno script, que poder ser obtido aqui: grepfind.gz. O script também garante que caracteres "não imprimíveis" sejam removidos, caso você use o egrep acidentalmente em um arquivo binário.

Um programa da busca muito interessante é o agrep. agrep funciona basicamente como o egrep, mas faz buscas tolerantes a falhas. Desta maneira você pode também encontrar palavras ligeiramente diferentes. Para procurar por uma expressão e permitir um máximo de 2 erros, você usará:

agrep -i -2 "expressao de busca" *

O programa agrep pode ser obtido no sunsite sunsite.unc.edu/pub/Linux/utils/text/agrep-2.04.tar.Z ou no site original ftp://ftp.cs.arizona.edu/agrep

Existe também o glimpse. glimpse é um utilitário de pesquisa muito poderoso. Ele usa um conceito similar ao do locate. Primeiro um banco de dados precisa ser construído, mas as pesquisas são muito rápidas. Para construir o índice de pesquisa para o conteúdo de todos os arquivos, começando pelo diretório corrente:

glimpseindex .

Depois disso você pode procurar por uma string em todos os arquivos que você indexou anteriormente:

glimpse -i -2 "expressao de busca"

glimpse é também tolerante a falhas (como o agrep) e o -2 permite até dois erros. glimpse está disponível em http://glimpse.cs.arizona.edu/


Existem muitos utilitários de pesquisa disponíveis especialmente para Unix e Linux. Este artigo não pretende ser completo. Se você está interessado em mais truques e utilitários como estes, então dê uma olhada no arquivos .lsm em ftp://sunsite.unc.edu/pub/Linux/utils

Diverta-se, feliz pesquisa.

Este website é mantido por Miguel Angel Sepulveda
© Guido Socher 1998
LinuxFocus 1998