Как удалить файлы - по дате в имени файла

У меня есть какая-то папка с файлами с именами «example_YY_MM_DD-HH.zip», и у меня есть 3 резервных копии в день. Мне нужно это:

1) Для резервных копий старше 1 недели мне нужен только один в день (в полночь «00» в ЧЧ)

2) Для резервных копий старше месяца мне нужен только один резервное копирование в неделю.

3) Для резервных копий старше одного года мне нужна только одна резервная копия в месяц (первый день месяца)

У меня есть только это, и я не знаю, что делать с частью IF.

Спасибо

#!/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
1
задан 28 December 2013 в 20:18

2 ответа

Это должно сработать (если вы указали правильный полный или относительный путь, он в настоящее время находится в тесте каталога)

#! /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

Я определил месяц как 31 день, чтобы всегда проверять, превышает ли он 1 месяц. Раз в неделю я выбираю дни 1 8 15 22 и 29, поэтому всегда есть первый день месяца. Это также работает в обратном каталоге, потому что он проверяет полночь для каждого файла.

Строки : - это просто заполнители на случай, если вы захотите поместить туда код.

Перед запуском проверьте все, на случай, если возникнет ошибка!

0
ответ дан 28 December 2013 в 20:18

Похоже, что это некоторые методы для достижения того, что вы ищете.

bash-скрипт для поиска старых файлов по дате выключения в имени файла

0
ответ дан 28 December 2013 в 20:18
  • 1
    Хорошо @Grammargeek, я выполнил команду и все, казалось, хорошо работало, но когда я запустил Minecraft, мировой файл не был там. В значительной степени то, что я хотел бы произойти, - то, что у них обоих будут те же мировые файлы, и я был бы в состоянии играть на них без меня имеющий необходимость постоянно скопировать и вставить содержание мира в .minecraft' s ' saves' папка. Я don' t думают, что я был то, что ясный на том, что я хотел сделать в своем вопросе так it' s не Ваш отказ;) – boatofturtles 18 June 2015 в 23:29

Другие вопросы по тегам:

Похожие вопросы: