
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/mbackups
e 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/mbackups
diretó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 find
comando substituindo a -delete
ação por algo inócuo, como -print
(você precisa -depth
aqui também, como -delete
implica -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+7
corresponderia 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 D
qualificador glob.
Se não houver nenhum arquivo correspondente, você receberá uma mensagem de erro. Você pode evitá-lo adicionando o N
qualificador glob (e rm
entã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 é -mtime
insuficientemente intuitivo, você poderia usarcouro cru(rh) em vez de:
rh -UUU -r /var/log/mbackups 'f && old(7*days)'
-UUU
desvincula/remove/exclui correspondências.
-r
é comoencontrare -mindepth 1 -maxdepth 1
pesquisa apenas exatamente um nível abaixo do(s) caminho(s) de pesquisa, portanto, os subdiretórios não são pesquisados.
f
corresponde a arquivos normais.
old(7*days)
corresponde à última modificação feita há pelo menos 7 dias.
Responder4
Aviso: -delete
não é padrão (não é portátil) e é arriscado ao usar o gfind
.
Lembre-se de que rm
há algumas restrições de segurança, mas a gfind
pá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
.