Como excluir arquivos - com base na data no nome do arquivo

1

Eu tenho uma pasta com arquivos com os nomes "example_YY_MM_DD-HH.zip" e tenho 3 backups por dia. Eu preciso disso:

1) Para backups com mais de uma semana, preciso de apenas um por dia (à meia-noite '00' em HH)

2) Para backups com mais de um mês, eu preciso de apenas um backup por semana.

3) Para backups com mais de um ano, preciso de apenas um backup por mês (primeiro dia do mês)

Eu tenho apenas isso e não sei o que colocar na parte do IF.

Obrigado

#!/bin/sh
export NOW=$(date +"%d-%m-%Y")
export OUTPUT=/media/backup/logs/delete-old.txt
export BACKUP_DIR=

for file in $BACKUP_DIR
do
if $file

fi
done
    
por zorbon.cz 28.12.2013 / 17:18

2 respostas

1

Isso deve funcionar (se você definir o caminho completo ou relativo correto, ele está atualmente no teste de diretório)

#! /bin/bash

nowday=$(date +"%d")
nowmonth=$(date +"%m")
nowyear=$(date +"%y")

#number of days since 1 Jan 1970 (today)
nowdays=$(($(date --date="20$nowyear-$nowmonth-$nowday" +"%s")/86400))

backup_dir="test/*"
#echo $backup_dir
for file in $backup_dir
do
  hour=${file: -6: -4}
  day=${file: -9: -7}
  month=${file: -12: -10}
  year=${file: -15: -13}
  #number of days since 1 Jan 1970 (file)
  days=$(($(date --date="20$year-$month-$day" +"%s")/86400))
  if ((days < nowdays-365)); then
    # more than one year
    if ((10#$day == 1))&&((10#$hour == 0)); then
      #day is 1 hour is 0 (we keep) use this space if you want to copy or something!
      :
    else
      #Wrong day or hour
      rm $file
    fi
  else if ((days < nowdays-31)); then
    # more than one month (31 days)
    if (((10#$day == 1))||((10#$day == 8))||((10#$day == 15))||((10#$day == 22))||((10#$day == 29)))&&((10#$hour == 0)); then
      #day is 1,8,15,22,29 hour is 0 (we keep) use this space if you want to copy or something!
      :
    else
      #Wrong day or hour
      rm $file
    fi
  else if ((days < nowdays-7)); then
    # more than one week
    if ((10#$hour == 0)); then
      #hour is zero se this space if you want to copy or something!
      :
    else
      #Wrong hour
      rm $file
    fi
  else
    # less than one week (we keep) use this space if you want to copy or something!
    :
  fi fi fi


done

Defini um mês como 31 dias sempre para verificar se há mais de um mês. Uma vez por semana eu escolho os dias 1 8 15 22 e 29, então sempre há o primeiro dia do mês. Isso também funciona no catálogo anterior porque verifica a meia-noite para cada arquivo.

As linhas : são apenas espaços reservados, caso você queira colocar o código lá.

Dê um cheque antes de executá-lo em tudo, caso haja um erro!

    
por Julian Stirling 28.12.2013 / 19:46
0

Parece que esses são alguns métodos para realizar o que você está procurando.

script bash para encontrar o antigo arquivos baseados na data no nome do arquivo

    
por TheHerk 28.12.2013 / 19:09