Como usar as funções de data para o specil de lote do Linux?

1

Primeiro, eu não tinha certeza se pertencia ao StackOverflow ou aqui, mas imagine que isso seria mais aplicável à administração do servidor.

Temos um arquivo .tar de backup indo para um servidor de backup off-site todos os dias, como parte de nosso processamento diário. Estes são arquivos relativamente grandes com uma média de 25 a 30 GB. Como resultado, só podemos manter cerca de duas semanas de backups. Toda sexta-feira (sim, esta é sexta-feira), um será ssh para o servidor remoto, o OpenSuse 12.1, e excluirá manualmente os arquivos na semana anterior e manterá os dados da semana atual. Existe um esquema de nomenclatura consistente dentro do arquivo com algo como BACKUP<YYYYMMDD><Time stamp> , por exemplo.

BACKUP20121022268498.tar
BACKUP20121022268498.log
BACKUP20121023268498.tar
BACKUP20121023268498.log
BACKUP20121024268498.tar
BACKUP20121024268498.log
BACKUP20121025268498.tar
BACKUP20121025268498.log
BACKUP20121026268498.tar
BACKUP20121026268498.log
BACKUP20121029268498.tar
BACKUP20121029268498.log
BACKUP20121030268498.tar
BACKUP20121030268498.log
BACKUP20121031268498.tar
BACKUP20121031268498.log
BACKUP20121101268498.tar
BACKUP20121101268498.log

e assim por diante.

Na maioria das vezes, eu usaria o comando rm *20121022* neste exemplo. Às vezes, como neste exemplo, sou capaz de usar o rm *201210[22-26]* . Fazendo uma rápida pesquisa no google enlameado a água para mim. Estou basicamente tentando configurar isso para que um estagiário possa fazer login e executar o script do diretório do usuário.

Existe uma maneira fácil de fazer isso? Por onde eu começo aqui? Eu estou familiarizado com o uso de funções de data em outros idiomas, mas pareço estar em um impasse como por onde começar aqui. Eu não faço um monte de scripts Bash. Obrigado.

    
por Chad Harrison 02.11.2012 / 21:24

2 respostas

1

Assumindo que os registros de data e hora dos arquivos permaneçam consistentes, você pode fazer isso com o find.

find /path/to/backups -type f -maxdepth 1 -mtime +7 -delete

Isso listará todos os arquivos no diretório, sem recursar, /path/to/backups que foram modificados pela última vez há mais de 7 períodos de 24 horas e os excluirá. Eu recomendaria rodar sem o -delete primeiro até que você saiba que funcionará para você.

Se você quiser operar em dias de calendário, use a opção -daystart . Acho isso muito útil quando tenho algo que gira arquivos por hora, mas quero basear meu cronograma de retenção em um calendário. Às vezes, a distinção entre "dia" e "período de 24 horas" realmente importa e usar -daystart certamente torna o cronograma de retenção mais fácil de explicar.

    
por 02.11.2012 / 21:31
0

Você pode excluir arquivos com mais de 1 semana usando o seguinte comando:

find /path -type f -name "BACKUP*" -mtime +7 -exec rm {} \;
    
por 02.11.2012 / 21:31