Por que o find não está excluindo arquivos antigos?

1

Eu quero copiar todos os arquivos gzipados dos meus logs do Apache que foram criados há menos de 43 dias.

Como um teste, eu simplesmente listei meus arquivos de find:

sudo find /var/log/apache2/ -mindepth 1 -ctime -43 -name "*.gz" -ls

Mas os resultados incluem arquivos criados desde agosto (quando o servidor foi configurado) e arquivos mais recentes:

8781890    4 -rw-r-----   1 root     adm           186 Aug 10 06:44 /var/log/apache2/error.log.13.gz
8781923    4 -rw-r-----   1 root     adm          1717 Aug 17 06:29 /var/log/apache2/error.log.12.gz

stat /var/log/apache2/error.log.13.gz
  File: '/var/log/apache2/error.log.13.gz'
  Size: 186             Blocks: 8          IO Block: 4096   regular file
  Device: 807h/2055d      Inode: 8781890     Links: 1
  Access: (0640/-rw-r-----)  Uid: (    0/    root)   Gid: (    4/     adm)
  Access: 2014-11-13 10:34:14.444059675 +1030
  Modify: 2014-08-10 06:44:11.000000000 +0930
  Change: 2014-11-09 06:29:48.035930468 +1030

Por que o argumento ctime não está sendo aplicado?

    
por HorusKol 13.11.2014 / 01:31

1 resposta

2

Esses arquivos foram girados e, durante o processo, a hora foi alterada. Toda vez que você touch um arquivo ou alterar seu conteúdo, você modificará seus timestamps, que substituirão os antigos. Isso irá enganar o seu comando de busca.

A listagem

ls mostra mtime ; uma vez que isto é o que ls mostra por padrão, a menos que o sinalizador -c (ctime) seja especificado

Então, em essência; seu critério ctime corresponde a arquivos e ls exibe mtime .

Então, tente ajustar seu comando de busca para algo como

sudo find /var/log/apache2/ -mindepth 1 -mtime -43 -name "*.gz" -ls

E deve funcionar como você esperava

    
por 13.11.2014 / 01:57