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