Como remover arquivos de forma recursiva?

Ola pessoal, estou com uma dúvida que achei que fosse simples de solucionar dando um google mas acho que não é tão simples assim.

Eu estou com um problema simples, preciso apagar diversos arquivos do tipo *.txt porém eles estão dentro de dezenas (ou centenas) de subpastas, ou seja, preciso fazer isso de maneira recursiva.

Por exemplo, temos a pasta raiz e as suas subpastas: raiz/sub1/sub2/sub3/…/subN

Dentro da raiz e das subpastas tenho centenas de arquivos .txt que preciso apagar, tentei usar o comando “rm” passando o parametro de recursividade “-r” ou “-R” e colocando o tipo ".txt", ficando assim: rm -r raiz/*.txt

Somente dentro da pasta raiz os arquivos .txt foram apagados, todas as subpastas continuaram normais.

Alguém tem alguma dica?

2 curtidas

Usa o find:

find raiz -type f -name '*.txt' -delete
3 curtidas

Explicação:

  • raiz é pasta onde estão os arquivos que você quer remover

  • -type f diz que você quer apenas arquivo (f vem de file)

  • -name diz que você só quer resultados que contenham o padrão que vem em seguida

  • '.txt’ é um padrão que significa comece com qualquer coisa () e termine com .txt

  • -delete diz pro find apagar os arquivos que ele encontrar


Dica: se quiser testar antes,troque -delete por -print assim ao invés de apagar ele mostra os arquivos

Se você quiser testar antes você pode trocar -delete

3 curtidas

Muito obrigado @Natanael.755 funcionou perfeitamente !

Eu não conheço muito bem o comando find, pelo que vi aqui da pra fazer muita coisa com ele. achava que era só o básico de buscar alguma coisa mas parece que não.

Vlw :+1: :+1: :+1:

1 curtida