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.

0 comentários: