Prompt do Linux: O comando find
13/11/07
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.






há 2 anos atrás
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…
há 2 anos atrás
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.
há 2 anos atrás
Também há a busca indexada com slocate, muito boa e rápida.
mais informações:
http://www.dicas-l.com.br/dicas-l/20060130.php
Abraço a todos.
há 2 anos atrás
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
há 2 anos atrás
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
há 2 anos atrás
Muito bom seu texto, valeu.
há 2 anos atrás
Já tinha visto um pouco disso em um curso báscio de linux…
É legal e fácil o que vale é a prática.
há 2 anos atrás
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.
há 2 anos atrás
@ 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
há 2 anos atrás
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
há 2 anos atrás
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.
há 2 anos atrás
@ 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
há 1 ano atrás
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
há 1 ano atrás
Então.
Eu estou quase desistindo de estudar sobre linux.Eu tenho 90 de livros sobre distribuições linux. Vamos ser realistas, windows está em 1° lugar pra quem quer crescer na vida.
Mas, eu uso algumas distros virtualizados !…hehehe
Até mais…
há 8 meses atrás
Não vai ser o Windows que irá te fazer crescer na vida… Isso definitivamente não importa.
há 1 ano atrás
Nestes 7 anos de Desenvolvimento para Web tem uma coisa certa que aprendí: não criticar o trabalho alheio, não criticar os bugs alheios, muito menos quando o programa é de graça. O AVG é um Antivirus Gratuito, o trabalho, pesquisa, esforço, atualizações são dados de graça (mesmo tendo uma versão comercial). Alguém ja reportou o bug para a Empresa? Já achei pessoas chamando o Linux de praga. Praga um SO gratuito, feito com qualidade e que não obriga ninguém a usá-lo. Outros criticando O Lynx pelo fato dele suportar somente texto, mas ele é um navegador tipo texto! Tem cada coisa nesse mundo!
há 1 ano atrás
Boas,
Pode explicar melhor como passar o arquivo como parametro para um script para podermos executar varios comandos com o find.
E que eu queria fazer o seguinte:
Procurar ficheiros com um determinado nome numa determinda directoria, isto eu sei fazer mas depois queria que aparece-se o seguinte output :
Exemplo:
Ficheiro ‘a/b/core.1′ 86016 bytes, remover (s/n)? n
Ficheiro ‘a/b/core.12′ 389120 bytes, remover (s/n)? n
Ou entao :
NUM TAMANHO TIPO NOME
1 942080 DIR ./a/b/CaChE.xyz
2 888832 FIC ./a/b/core.1234
há 7 meses atrás
Excelente artigo, uso Linux a algum tempo mas somente agora é que estou aprendendo a utilizar o prompt.
Respondendo a nosso amigo sergio serra, é como dito no artigo:
- Remover todos os arquivos em /home que terminem com .tmp:
$ find /home -type f -name ‘*.tmp’ -exec rm -f ‘{}’ \;
Basta adicionar a opçao -i de interativo do comando rm, fincando assim o comando:
$ find /home -type f -name '*.tmp' -exec rm -fi '{}'
Se estiver errado, por favor me corrijam.
Abraços