Como FILTRAR os arquivos com o nome do arquivo e depois EXCLUIR o arquivo OLDEST de lá? [duplicado]

2

Eu crio e mantenho os seguintes arquivos de backup automatizados, por exemplo:

fruits_29-12-2013.gz
fruits_30-12-2013.gz
fruits_31-12-2013.gz
sweets_01-12-2013.gz
sweets_02-12-2013.gz
sweets_03-12-2013.gz

.. na verdade, muitos deles na mesma pasta.

(Mas, em seguida, é um problema para casa mantê-los manualmente, mas eu ainda tenho que. Porque depois de um mês, todos são ocupados pelo espaço em disco. Então eu preciso limpar os arquivos mais recentes, de acordo.)

Como automaticamente DELETE o arquivo OLDEST com nome começa com fruits ?

(Então eu vou colocar esse script / comando no diário crons.)

    
por 夏期劇場 10.01.2014 / 09:25

1 resposta

2
rm  "$(ls -1t fruits_*.gz | tail -1)"

Os nomes acima dos arquivos, um por linha, classificados por idade ( ls -1t ) e deleta ( rm ) o último, ou seja, o mais antigo, um ( tail -1 ).

(O acima não funcionaria para todos os arquivos, mas como seus arquivos são sensivelmente nomeados, tudo bem.)

Outra possibilidade, conforme o comentário do @ Anthon, é excluir os backups que são mais antigos que, digamos, 30 dias. Nesse caso:

find . -maxdepth 1 -mtime +30 -name 'fruits_*.gz' -delete

O arquivo acima exclui os arquivos encontrados no diretório atual ( . ), mas não mais ( -maxdepth 1 ) com a última modificação de mais de 30 dias atrás ( -mtime +30 ) e um nome que corresponde ao padrão fruit_*.gz .

Ambos os comandos acima assumem que o diretório de trabalho atual é aquele com os arquivos de backup. Você pode executá-los a partir de outro diretório com pequenas alterações.

    
por 10.01.2014 / 09:49