Usando comando FIND para fazer buscas avançadas

Neste post será abordado como usar o find para encontrar arquivos em diversas situações.

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 mysql

– Encontrar arquivos em /home cujo nome termine em “.tmp”:
$ find /home -type f -name ‘*.jpg’

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 ‘{}’ \;