Prompt do Linux: O comando find

13/11/2007, 17:42

Daniel Carmo Olops

13 comentários
Continuando a série de artigos “Prompt do Linux”, hoje trataremos do comando find.
Sua utilidade principal é encontrar arquivos dentro de um sistema de arquivos. Há diversos critérios que você pode usar para a busca: nome, tipo, data de modificação, tamanho, proprietário, etc. Você pode especificar o local da pesquisa (quando não informado, a pesquisa ocorre no diretório atual e seus subdiretórios) e pode também combinar critérios de pesquisa. Vamos a alguns exemplos.
Buscas por nome
- Encontrar arquivos que terminem com “mdb” no diretório atual e subdiretórios:
$ find -name '*mdb'
- Encontrar arquivos que contenham “Avaliação” em qualquer parte do nome, independente da casa (maiúsculas/minúsculas), no diretório atual e subdiretórios:
$ find -iname '*avaliação*'
- Encontrar links que apontam para arquivos que contenham “Informática” no nome, no diretório /home:
$ find /home -lname '*Informática*'
- Semelhante ao acima, porém ignorando a casa:
$ find /home -ilname '*Informática*'
Buscas por tipo
- Encontrar diretórios em /var que se chamem exatamente “samba”:
$ find /var -type d -name samba
- Encontrar arquivos em /home cujo nome termine em “.tmp”:
$ find /home -type f -name '*.tmp'
Buscas por datas
- Encontrar arquivos e diretórios modificados em /home há menos de 3 dias (repare no sinal de menos):
$ find /home -mtime -3
- Encontrar arquivos que não são acessados há mais de 60 dias em /var (repare no sinal de mais):
$ find /var -type f -atime +60
Fora isto, pode-se executar comandos para cada resultado encontrado pelo find. Por exemplo: você poderia trocar a permissão de cada arquivo importado, ou imprimi-lo, ou executar qualquer outra coisa =) Basta acrescentar o parâmetro -exec ao fim do comando e especificar o que deve ser feito, usando ‘{}’ como nome do arquivo, e terminando o comando com \; - mais exemplos:
- Acrescentar o bit SGID aos diretórios embaixo de /home:
$ find /home/* -type d -exec chmod g+s '{}' \;
- Remover todos os arquivos em /home que terminem com .tmp:
$ find /home -type f -name '*.tmp' -exec rm -f '{}' \;
Até onde eu sei, somente um comando pode ser executado para cada resultado. Se quiser executar mais de um, crie um script que receba o arquivo como parâmetro, e execute as operações necessárias. Em seguida, use este script como sendo o seu comando a ser executado pelo find.
Use o comando find –help para consultar as outras opções possíveis.
Daniel Carmo Olops. Sou graduando em Ciência da Computação, e atualmente trabalho para a Faculdade de Jaguariúna na área de Informática, administrando servidores Linux e também as atividades do setor.
Tenho uma relação de quase 10 anos com a informática, e tenho conhecimentos em diversas áreas e softwares, a maioria deles adquirido em fóruns ou através de empirismo (o chamado "se vira").
A cada post sobre Linux, eu vejo que é verdade que só não aprende linux quem é preguiçoso, por que no win já vem tudo mastigado…
Pena que sou MUITO preguiçoso nesta parte, mesmo assim, penso em um dia tentar usar o Linux….
Por enquanto deixo o Bill fazer o trabalho pesado para mim… 
[Responder]
RScheffer, quem disse que no “Linux” não tem botão direito na pasta e mandar procurar. Aí só está explicando isso em linha de comando, que a propósito também tem no Windows (não que seja aquelas coisas… mas tem) e também deve ter um comando find.
[Responder]
Só esqueci de citar que o find não gera banco de dados, portanto sua pesquisa é mais lenta mesmo… O slocate tem buscas muito mais rápidas, mas você não pode esquecer de atualizar o banco periodicamente (slocate -u), seja manualmente ou via cron.
[]s
[Responder]
A ferramenta de busca do Ubuntu, por exemplo, é bem mais completa que a do Windows. Até expressão regular suporta. Não digo isto incentivando uma discussão Linux vs Windows, pelo contrário, é só para constar para quem possui pré-conceito do Linux. Eu mesmo houvia antes de usar Linux um monte de bobeira sobre ele, foi começar a usar para ver que não era nenhum bicho-de-sete-cabeças como diziam (neste caso, quem dizia com certeza nunca tinha usado). A usabilidade/acessibilidade é tão boa quanto um Mac ou Windows.
Sobre o modo texto, vale lembrar que dá para procurar também com o comando grep, que serve para procurar no conteúdo dos arquivos. Quando eu esqueço em qual arquivo PHP eu escrevei determinado código eu não penso duas vezes: grep -R fragmento_do_código /var/www/*.php. No próprio shell eu já vou vendo as partes dos arquivos que ele encontrou o fragmento e já descubro em qual arquivo eu escrevi e ponto final.
[]’s
[Responder]
Já tinha visto um pouco disso em um curso báscio de linux…
É legal e fácil o que vale é a prática.
[Responder]
Qual é a utilidade de se ensinar comandos em modo texto no linux para usuários Windows? Nem mesmo quem é usuário de Linux usa esse comando, e faz tempo.
Eu mesmo que sempre usei o Windows, passei a usar linux recentemente, e sempre que preciso procurar algo uso a interface gráfica, da mesma forma que fazia no Windows. Nunca usei esse troço de “find”.
Hoje em dia, só usa modo texto em boas distribuções do Linux (como o Ubuntu) quem gosta MESMO de modo texto. Se não gostar, não precisa usar nunca.
[]’s,
Davi.
[Responder]
@ Davi Souza
“Qual é a utilidade de se ensinar comandos em modo texto no linux para usuários Windows?”
Quem lhe disse que o GdP é exclusivo para usuários Windows? Tu viu a categoria onde o artigo foi postado?
Já em relação a tua opinião sobre o modo texto, posso lhe dizer que estás redondamente enganado. Quem usa modo texto não é só porque gosta (porque é verdade, uma vez usado, não há como não usá-lo novamente), usa-o quem é “esperto” o suficiente para saber que o modo gráfico não oferece todas as opções que o modo texto oferece. Coloquei “esperto” entre aspas para não caracterizar como ofensa, mas uma coisa é certa, isso é ignorância (no que tange o desconhecimento) de sua parte.
Quem curte shell script não gosta de perder tempo. É prompt na certa.
Seria a mesma coisa se tu dissesse para usar um Synaptic (por exemplo) ao invés de compilar o programa no prompt. São dois caminhos diferentes. Quem os conhece, sabe que via shell script pode fazer melhor, uma vez que quem está no comando é o próprio usuário. ;D
[]’s
[Responder]
Davi, com todo o respeito, você está absurdamente enganado. Não vou repetir o que o Paulo Ricardo já disse; apenas complemento que o modo texto é essencial em ambientes corporativos, pois servidores raramente são administrados com ferramentas gráficas do KDE ou Gnome (quando muito, são usadas interfaces Web), e simplesmente não dá pra fazer no GUI tudo o que é possível no prompt. Uma das essências do Linux é o shell =)
[]s
[Responder]
Caros amigos,
Sou usuário de sistemas operacionais Microsoft desde o DOS 6.2. Fui forte usuário do Lotus 123, e costumava usar como GUI o XTree Gold.
Quando lançaram a interface Windows (naquela época, como certamente sabem, o Windows nada mais era que uma interface gráfica que rodava por sobre o SO, que era o DOS), para terem uma noção, eu só a usava em casos muitos esporádicos, e mesmo assim a rodava de dentro do XTG.
Digo isso para mostrar que não tenho nenhum problema nem dificuldade com linhas de comando em modo texto. Pelo contrário, me dou muito bem com elas, e até hoje tenho um pacote RAR no meu pendrive para emergências, que uso em modo texto.
O que disse acima, como recente usuário e mais novo fã do Linux, é que insistir em dizer para usuários Windows comuns, que geralmente nunca abriram nem o painel de controle do Windows, para eles abirem o terminal e usarem comandos como “$ find /var -type f -atime +60″ é um de-serviço a comunidade Linux.
É fazer o cara achar que Linux é realmente coisa de nerd (antes que me critiquem novamente, me enquadro muito bem na categoria nerd), e que se para usar Linux ele tem que aprender essas coisas “difíceis” (para eles isso e mandarim chinês são a mesma coisa), ele JAMAIS vai querer sequer olhar para o Linux, muito menos instalar e tentar aprender, pois vai preferir ficar com o Windows que “já vem mastigadinho”, como foi dito no primeiro comentário.
Para os fãs de Linux, e novamente me incluo nessa categoria, a melhor política é mostrar o quanto usar o Linux é simples. O quanto, na verdade, é muito mais simples que o Windows. O quanto é mais rápido de instalar. O quanto ele é bom em reconhecer hardware automaticamente. O quanto você não precisa saber absolutamente nada além do que você já sabe do Windows - e que de fato, você precisar saber MENOS até que no Windows - para instalar, usar e fazer as coisas básicas.
Enquanto os fãs do Linux ficarem tentando se “diferenciar”, e dando dicas como: “é fácil, abra o terminal e digite sudo apt-get -y 1safdg42342edsqds.25yteafger.lib”, vão ser eles próprios a contribuir para que o preconceito contra o Linux continue.
[Responder]
@ Davi Souza
Não concordo com o que disse. A propósito, esta categoria de artigos é voltada mais para usuários Linux, ou seja, usuários já habituados com o sistema. Não acho que uma sopa de letrinhas de comandos no prompt vá fazer com que o usuário tenha medo de experimentar Linux.
O Windows também possui prompt de comandos (embora nem se compare ao do Linux) e não por isso os usuários dele se preocupam com tal. Pra tu ter uma idéia, um dos motivos que me fez migrar pro Linux (dentre vários) foi o próprio shell. Faço de tudo com bash. Hoje em dia nem dá mais pra viver sem ele, ha ha ha…
[]’s
[Responder]
Prezado Daniel:
Muito obrigado pelas dicas !
Consegui vasculhar todas as subpastas de /home para localizar e deletar arquivos de música e videos nos backups dos meus usuários 
[Responder]