Как удалить папку старых резервных копий на основе даты в имени файла

У меня есть две папки для полной и дополнительной папки, в которой есть отдельная резервная папка в зависимости от даты в имени папки, например:

cd /backup/Full                     
Jul 12 17:52 01-07-2017
Jul 12 18:32 08-07-2017
Jul 15 18:20 15-07-2017
cd /backup/Incremental
Jul 13 12:01 02-07-2017
Jul 13 12:09 03-07-2017
Jul 13 12:14 04-07-2017
Jul 13 12:22 05-07-2017
Jul 13 12:36 06-07-2017
Jul 13 12:47 07-07-2017
Jul 13 12:49 09-07-2017

Я хочу запустить скрипт, который рассчитает, что папка старше 90 дней на основе дата в качестве имени папки, например 01-07-2017 , и удалите ее (строго не учитывая дату создания папки). Мне нужно запустить 2 сценария: один для полного и второй для инкрементального, используя то же условие.

-1
17.07.2017, 14:09
3 ответа

Предлагаю сделать bash-скрипт для:

  1. получить имена папок в массив в формате yyyymmdd как int
  2. вычислить текущую дату -90 в формате ггггммдд как int
  3. список переменных меньше текущей даты -90 вернуться к формату дд -мм -гггг
  4. запустить rm для перечисленных каталогов.

Но, может быть, кто-то сделает это лучше

0
28.01.2020, 05:10

Реализация описания @Krzysztof Stasiak может быть такой.

Сначала создайте несколько тестовых каталогов:

cd /backup
mkdir Full/20170{1,7}02
mkdir Incremental/2017010{1..9}
mkdir Incremental/2017070{1..9}

И сценарий:

#! /bin/bash
cd /backup
for P in Full Incremental; do
    cd $P
    for D in *; do
        [ $(date -d '-90 days' +%Y%m%d) -gt $D ] && rm -rf $D
    done
    cd..
done

Для проверки вы можете поставить echoперед rm, чтобы увидеть, что будет сделано, но не делая этого.

Здесь мы просто cdпереходим в главный каталог и запускаем циклfor-для двух каталогов:

cd /backup
for P in Full Incremental; do

затем перейдите в каталог "periode":

cd $P

затем выполните forцикл по всем каталогам:

for D in *; do

если сегодня минус 90 дней больше -, чем -gtкаталог$D:

[ $(date -d '-90 days' +%Y%m%d) -gt $D ]

, затем удалите каталог:

&& rm -rf $D

Вы также можете написать это как:

if [ $(date -d '-90 days' +%Y%m%d) -gt $D ]; then
  rm -rf $D
fi

Рассмотрите возможность использования стандартного программного обеспечения для резервного копирования. Это может быть Бакула.

0
28.01.2020, 05:10

найти. -type d -mtime +90 -exec rm {}\;

  • найти файлы (f )в текущем каталоге (. )старше 90 дней, выполните команду удаления (rm ).

. можно заменить на путь к каталогу/

4
28.01.2020, 05:10

Теги

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