Exclua apenas arquivos com mais de 7 dias: -mtime e encontre

Exclua apenas arquivos com mais de 7 dias: -mtime e encontre

Encontrei algumas perguntas semelhantes, mas não correspondiam.

Eu tenho um diretório para backups (sql) e quero excluir todos os arquivos desse diretório com mais de 7 dias, deixando todos os subdiretórios intactos.

Isto é o que eu tenho:

find /var/log/mbackups -mtime +7 -type f -delete

Esta é a maneira correta de realizar o que procuro?

Responder1

Seu comando examinará o diretório de nível superior /var/log/mbackupse também descerá para quaisquer subdiretórios, excluindo arquivos que correspondam ao critério de sete dias. Isso não excluirá os próprios diretórios.

Se você quiser que um comando veja os arquivos apenas no /var/log/mbackupsdiretório enão descer para subdiretórios, você precisa adicionar essa restrição:

find /var/log/mbackups -maxdepth 1 -mtime +7 -type f -delete

Em geral você pode testar o findcomando substituindo a -deleteação por algo inócuo, como -print(você precisa -depthaqui também, como -deleteimplica -depth):

find /var/log/mbackups -depth -mtime +7 -type f -print

Responder2

Com zsh:

rm -f /var/log/mbackups/*(.m+6)

igual a:

rm -f /var/log/mbackups/*(.^m-7)

Removeria os .arquivos regulares (com) que não estão ocultos e não foram modificados nos últimos 7 dias. Como for find's -mtime +7, m+7corresponderia em arquivos cuja idade arredondada para o próximo número inteiro de dias é estritamente maior que 7, portanto corresponderia em arquivos com 8 dias ou mais (uma armadilha comum ao trabalhar com find).

Para remover também arquivos ocultos antigos, adicione o Dqualificador glob.

Se não houver nenhum arquivo correspondente, você receberá uma mensagem de erro. Você pode evitá-lo adicionando o Nqualificador glob (e rmentão será chamado sem argumento de nome de arquivo, mas com -f, não deve reclamar disso).

Responder3

Isenção de responsabilidade: sou o atual autor de couro cru (rh) (vejahttps://github.com/raforg/rawhide)

Quase. Está muito perto. A versão correta da sua tentativa é:

find /var/log/mbackups -maxdepth 1 -mtime +6 -type f -delete

Se você acharencontrarargumento predicado de é -mtimeinsuficientemente intuitivo, você poderia usarcouro cru(rh) em vez de:

rh -UUU -r /var/log/mbackups 'f && old(7*days)'

-UUUdesvincula/remove/exclui correspondências.

-ré comoencontrare -mindepth 1 -maxdepth 1pesquisa apenas exatamente um nível abaixo do(s) caminho(s) de pesquisa, portanto, os subdiretórios não são pesquisados.

fcorresponde a arquivos normais.

old(7*days)corresponde à última modificação feita há pelo menos 7 dias.

Responder4

Aviso: -deletenão é padrão (não é portátil) e é arriscado ao usar o gfind.

Lembre-se de que rmhá algumas restrições de segurança, mas a gfindpágina de manual não menciona tais restrições para -delete. Portanto, recomendo usar o método oficial:

find /var/log/mbackups -mtime +7 -type f -exec rm {} +

Isso não é ainda mais lento que o método não padrão usando -delete.

informação relacionada