Find, Casos de uso simples




O comando find no linux é um dos melhores jeitos de você encontrar arquivos. Ele não é o único comando com essa proposta, mas acredito que é o melhor. Arrisco dizer que explorar os recursos desse comando, permite você encontrar qualquer coisa no sistema operacional.

O que despertou interesse pelo comando find, foi uma demanda recente de apagar arquivos que tivessem data de acesso superior a 30 dias em alguns determinados paths.


Em um primeiro momento pensei em como listar esses arquivos, até rascunhei algo utilizando: ls -lu, mas logo mudei o pensamento e entendi que não resolveria acessando os diretórios e listando os arquivos, mas sim encontrando eles de forma recursiva dentro dos diretórios especificados.

Pois bem, ai que entra o find:

find $1 -type f -atime +30 -delete > /var/log/`date +%Y-%m-%d`.deletei_esses_arquivos.log
$1 = Corresponde a qualquer coisa que você digite apos chamar o script. Admitindo que o script se chama: apagar.sh, então quando você digita: sh apagar.sh /home/pedro/arquivos, então o $1 corresponde ao path: /home/pedro/arquivos.


-type f = Digo que a unica coisa que interessa são arquivos, poderia ainda fazer correlação com pastas e por -type d.


-atime +30 = Data de acesso superior a 30


-delete = Deleta o que for encontrado


> /var/log/`date +%Y-%m-%d`.deletei_esses_arquivos.log = Pego a saida do comando find e gero um arquivo de log chamado: deletei_esses_arquivos.log com a data de quando foi executado.


Então quer dizer que o find só serve para isso? não! ;)
Segue alguns outros exemplos:

$ find /home/pedro -name *.py
Pesquiso no diretório /home/pedro por qualquer coisa que tenha em seu nome .py. Ok, e se eu não souber se é .py ou .PY ?! Utilize -iname ao invés -name, dessa forma a busca não será mais case sensitive.

$ find /home/pedro -maxdepth 2 -name *.py
Admitindo que você é organizado e acredita que seus arquivos python estão a 2 niveis de diretorios para dentro da raiz /home/pedro. Então -maxdepth 2 é a solução, ele vai se aprofundar apenas o que você indicar.

$ find /home/pedro -maxdepth 2 -not -name *.py
E se você não quiser listar o .py? Vai que dentro da pasta cheia de .py tem apenas um único .js que você copiou sem querer e para piorar não lembra o nome, muito menos a extensão?! Ok, eu forcei muito a barra, mas é possível. :) argumento -not se encarrega disso.


A ideia aqui não é construir o melhor tutorial de find da internet, é apenas mostrar um pouco do que o comando é capaz de fazer, confesso que eu não conhecia muito menos curtia muito o find, sempre optava por "updatedb" e em seguida "locate". Mas apos aquele caso de uso do inicio do post eu olho para esse poderoso comando com outros olhos.

Postagens mais visitadas deste blog

Cartão de Visita com Inkscape

Fluentd + Elasticsearch + Kibana

Esqueceu a senha do MySQL ?