O comando FIND (busca)


Share Button

O comando FIND é um dos comandos mais completos que existe no Linux.

Embora muitas pessoas achem que é medonho e terrível fazer buscar através do terminal, elas desconhecem o poder de um verdadeiro sistema de busca, principalmente porque a maioria está acostumada com o Windows.

Eu não irei tentar explicar todo o comando FIND, pois as possibilidades são enormes, mas focarei as principais possibilidades do comando FIND.

Sempre que surgir uma dúvida, consulte o manual do FIND (digite no shell: man find).

Eu começarei explicando o básico e partindo da idéia de que você entendeu os exemplos, eu vou aumentando a complexidade dos comandos, ou seja, na primeira linha você não precisa ter conhecimento algum sobre o FIND, mas na vigésima linha eu já considero que você compreendeu os comandos anteriores.

  • Buscando arquivos e pastas:
    • No diretório atual:
      find . -name arquivoX
    • No diretório /home:
      find /home -name arquivoX
    • Em todos os locais possívels:
      find / -name arquivoX
  • Buscando apenas arquivos ou apenas pastas:
    • Apenas pastas:
      find /home -type d arquivoX
    • Apenas arquivos:
      find /home -type f arquivoX
    • Consulte outras possibilidades no manual do comando FIND;
  • Buscando arquivos ou pastas com determinado CHMOD (permissão):
    • Arquivos com CHMOD 777:
      find /home -type f -perm 777
    • Arquivos e pastas com CHMOD 777:
      find /home -perm 777
  • Buscando arquivos com determinado tamanho:
    • Com mais de 400kBytes:
      find /home -type f -size +400k
    • Com menos de 5mBytes:
      find /home -type f -size -5M
    • Com mais de 850kBytes e menos de 95mBytes:
      find /home -type f -size +850k -size -95M

      Otimizando:

      find /home -type f -size +850k && -95M
    • Sugiro consultar o manual para descobrir mais possibilidades e otimizações;
  • Buscando arquivos verificando datas:
    • Modificado há N dias (o N é multiplicado por 24 horas automaticamente):
      find /home -type f -atime N

      Se N houver parte fracionária, ela será ignorada;

    • Modificado há até 5 (ou N) minutos:
      find /home -type f -ctime 5
      find /home -type f -ctime N
    • Modificado há mais de 5 dias, mas não mais que 10 dias:
      find /home -type f -atime -10 -atime +5
    • Modificado há pelo menos 10 minutos, mas não mais que 1 hora:
      find /home -type f -ctime +10 -ctime -60

      Otimizando:

      find /home -type f -ctime +10 && -60
  • Buscando por arquivos de determinados usuários:
    • find /home -type f -user root -name arquivoX
  • Executando comandos com os arquivos localizados:
    • Sintaxe:
      find /home -type f -perm 777 -user root -exec chmod 644 {} \;


      O que faz: Procura no diretório rome (find /home) arquivos (-type f) com permissão 777 (-perm 777) que pertençam ao usuário root (-user root) e executa chmod 644 em cada arquivo (representado por “{}”).
      O fim do comando -exec deve ser explicitado, pois você pode usar expressões tanto antes de “{}” (isto é chamado de lista) quanto depois.
      Coloca-se o caracter “\”, assim o shell não interepretará o caractere seguinte, que é o “;”, que indica o final da instrução “-exec”.

    • find /home -type f -ctime +10 && -60 -exec  mv {} /tmp/teste \;


      O que faz: Procura arquivos no diretório home com permissão 777 (find /home -type f -perm 777) e move para a pasta /tmp/teste (“-exec mv {} /temp/teste \;”)

  • Para incrementar as buscas é interessante saber como trabalhar com expressões regulares, assunto este que será tratado em outro artigo.
    Darei alguns exemplos da utilidade de expressões regulares, mas não se preocupe em entender, pois é um assunto para outro artigo.
    O recurso “-iname” é usado quando você não quer diferir maiúscula de minúscula, isto é, retira o modo case sensitive do termo a ser buscado. Ao usar a expressão seguinte entre aspas simples, você estará usando expressões regulares ao invez de um nome específico, ou seja, é um “-iname/-name” mais elaborado.

    • Exemplo1 :
      find /home -iname '.*jpg'

      Busca todos os arquivos que tenham qualquer caracter (representado por “.”) em qualquer quantidade (representado por “*”) e que termine por “jpg”.

    • Exemplo 2:
      find /home -iname 'DSC.*\.jpg'

      Busca por arquivos que comecem por “DSC” e que contenham qualquer coisa em qualquer quantidade até encontrar um “.jpg”.

, , , , ,

  1. #1 by Marcos on January 30, 2012 - 8:24 am

    Bom dia, Francisco !

    Muito bom sua página, excelente artigo !
    Muitos administradores apesar de usar a dupla updatedb/locate, jamais vão largar o grande “find”.
    Poderia com sua permissão, dispor desse conteúdo para colocar em meu humilde blog ?

(will not be published)