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.
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ê
um linux de verdade, só seu, apagado quando você sai.
procura na pasta projeto todos os arquivos que terminam em .py. põe o padrão entre aspas.
find projeto -name "*.py"entra na pasta projeto e procura o mesmo, mas sem aspas, e o asterisco solto. o que acontece?
agora lista só as pastas, a partir de onde você está.
find . -type dlimita a busca a um nível só, sem descer nas subpastas, e procura os .py.
find . -maxdepth 1 -name "*.py"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 f | só arquivos, sem descer |
find . -mtime +30 -print | lista antes de apagar |
primeiro -print. só depois -delete.