Excluindo arquivos por data: find + xargs + rm

Publicado por Marcos Miras em 26/07/2008

[ Hits: 44.766 ]

 


Excluindo arquivos por data: find + xargs + rm



Olá pessoal, vejo que muita gente tem dúvidas na hora de excluir arquivos por lote, principalmente quando se fala em apagar arquivos por data. Para isso utilizarei o comando find em conjunto com xargs e rm.

Tenho um diretório chamado $HOME/teste/, dentro dele possuo 14 arquivos com datas diferentes:

$ ls -lh
-rw-rw-r-- 1 marcos marcos 0 Jul 1 12:12 arquivo01
-rw-rw-r-- 1 marcos marcos 0 Jul 2 12:12 arquivo02
-rw-rw-r-- 1 marcos marcos 0 Jul 3 12:12 arquivo03
-rw-rw-r-- 1 marcos marcos 0 Jul 4 12:12 arquivo04
-rw-rw-r-- 1 marcos marcos 0 Jul 15 12:12 arquivo05
-rw-rw-r-- 1 marcos marcos 0 Jul 16 12:12 arquivo06
-rw-rw-r-- 1 marcos marcos 0 Jul 17 12:12 arquivo07
-rw-rw-r-- 1 marcos marcos 0 Jul 18 12:12 arquivo08
-rw-rw-r-- 1 marcos marcos 0 Jul 19 12:12 arquivo09
-rw-rw-r-- 1 marcos marcos 0 Jul 20 12:12 arquivo10
-rw-rw-r-- 1 marcos marcos 0 Jul 21 12:12 arquivo11
-rw-rw-r-- 1 marcos marcos 0 Jul 22 12:12 arquivo12
-rw-rw-r-- 1 marcos marcos 0 Jul 22 22:12 arquivo13
-rw-rw-r-- 1 marcos marcos 0 Jul 23 2008 arquivo14

Com o find eu procuro os arquivos e os ordeno por data, posteriormente (após o pipe) executo o xargs e por último o rm. O segredo está no xargs, que pegará o resultado do find e jogará no rm. Veja:

$ find /home/marcos/teste ! -mtime -7 | xargs rm -rf

Ele simplesmente apagou todos os arquivos com mais de sete dias!

$ ls -lh
-rw-rw-r-- 1 marcos marcos 0 Jul 17 12:12 arquivo07
-rw-rw-r-- 1 marcos marcos 0 Jul 18 12:12 arquivo08
-rw-rw-r-- 1 marcos marcos 0 Jul 19 12:12 arquivo09
-rw-rw-r-- 1 marcos marcos 0 Jul 20 12:12 arquivo10
-rw-rw-r-- 1 marcos marcos 0 Jul 21 12:12 arquivo11
-rw-rw-r-- 1 marcos marcos 0 Jul 22 12:12 arquivo12
-rw-rw-r-- 1 marcos marcos 0 Jul 22 22:12 arquivo13
-rw-rw-r-- 1 marcos marcos 0 Jul 23 2008 arquivo14

Você pode usar o parâmetro -mtime no find para arquivos com diferença de dias ou o -mmin para arquivos com diferença de minutos.

[]'s
Marcos Miras

Outras dicas deste autor

Deixando seu GEdit com a cara do TextMate

Resolvendo o REDIRECT_TO do Rails em HTTPS

Compilar shell script

Escutando CDs no XMMS

Rails + Apache = mod_rails

Leitura recomendada

Unix Emulator Online

Reset Router WAG120N pelo Shell

Shell In A Box - Acessando o Shell Linux pelo Navegador Web

Atualizando script id-velox.pl para autenticar no provedor AOL

Iniciando automaticamente o Firestarter com o modo gráfico sem senha

  

Comentários
[1] Comentário enviado por pstglia em 26/07/2008 - 15:46h

Opa, blz? Seu exemplo é bacana. O xargs é muito útil, mas nem todo mundo usa.

Com o find da para fazer assim também:

$ find /home/marcos/teste ! -mtime -7 -exec rm {} \;

Um abraço!

[2] Comentário enviado por spezzia em 16/01/2013 - 08:43h

esse rm -rf tambem serve pra apagar diretorios ou só arquivos ?
se eu quizer apagar todos os arquivos com mais de 60 dias naquele diretorio ?

[3] Comentário enviado por dtux em 03/06/2013 - 20:09h

Ficaria dessa forma:
find / -atime +60 -delete
ou
find / -atime +60 -exec rm {} \;
ou utilizando o xargs como nosso amigo:
find / -atime +60 | xargs rm -rf

[4] Comentário enviado por felixbahia em 19/02/2016 - 13:37h

Como faço para deletar arquivos por ano, por exemplo, arquivos criados em 2011, tem como me ajudar?



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts