linux.playground

trilha / arco 2 · mexer em arquivo

o que é find e o que ele faz

você queria apagar os logs velhos. o find apagou tudo o que tinha na pasta. o filtro estava na linha. estava só do lado errado do -delete.

em poucos minutos: o que o find faz, as aspas que decidem se ele funciona, e a ordem que separa apagar o certo de apagar tudo. a pílula fica no final.

o vídeo desta aula sai em breve.
a aula já funciona: lê, treina no terminal e faz o quiz.

escolhe a camada

em uma frase

é um fiscal passando de gaveta em gaveta com uma lista de perguntas. quem passa em todas, sofre a ação.

para quem está começando

procura arquivos e pastas por nome, tipo, tamanho ou data, a partir de uma pasta, descendo em todas as de dentro. o resultado é uma lista de caminhos.

a fonte da verdade

o find percorre as pastas e aplica cada teste da linha a cada arquivo, da esquerda para a direita. as respostas vêm do inode: nome, tipo, data, tamanho. -delete é uma ação: age em tudo que chegou até ele.

o número por trás do nome

o -mtime +30 quer dizer mais de 30 dias cheios, o find arredonda para baixo: o primeiro arquivo que passa tem 31 dias. -mtime 30 é exatamente 30, -mtime -30 é menos de 30.

agora você

terminal fechado

um linux de verdade, só seu, apagado quando você sai.

  1. procura na pasta projeto todos os arquivos que terminam em .py. põe o padrão entre aspas.

    find projeto -name "*.py"

  2. entra na pasta projeto e procura o mesmo, mas sem aspas, e o asterisco solto. o que acontece?

  3. agora lista só as pastas, a partir de onde você está.

    find . -type d

  4. limita a busca a um nível só, sem descer nas subpastas, e procura os .py.

    find . -maxdepth 1 -name "*.py"

  5. procura os .log com mais de 30 dias. só mostra, não apaga.

    find . -name "*.log" -mtime +30

cuidado: find . -delete -name apaga tudo

o arquivo ~/limpar-logs.sh apaga os .log com mais de 30 dias da pasta ~/projeto. só que o -delete está na frente dos filtros. o find lê a linha da esquerda para a direita: o -delete roda para tudo o que passou até ali, e o -name e o -mtime chegam tarde. passo 1: veja o estrago. rode ~/limpar-logs.sh e depois ls -R projeto. o que não era log velho também sumiu. para trazer tudo de volta, digite restaurar-projeto (só esse nome, sem ./ e sem .sh). passo 2: conserte o script. abra com nano ~/limpar-logs.sh. para salvar: ctrl+o e enter. para sair: ctrl+x. passo 3: teste. rode restaurar-projeto, depois ~/limpar-logs.sh, e confira com ls -R projeto que só os logs velhos sumiram.

a pílula

find . -name '*.py'acha por nome (aspas no padrão)
find . -maxdepth 1 -type fsó arquivos, sem descer
find . -mtime +30 -printlista antes de apagar

primeiro -print. só depois -delete.

quiz

1. find . -name *.py, sem aspas, dá erro numa pasta que tem a.py e b.py. por quê?
2. find . -delete -name "*.log" apaga o quê?
3. find . -mtime +30 pega qual arquivo?

próxima: o que é grep e o que ele faz