У меня есть две папки для полной и дополнительной папки, в которой есть отдельная резервная папка в зависимости от даты в имени папки, например:
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 сценария: один для полного и второй для инкрементального, используя то же условие.
Предлагаю сделать bash-скрипт для:
Но, может быть, кто-то сделает это лучше
Реализация описания @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
Рассмотрите возможность использования стандартного программного обеспечения для резервного копирования. Это может быть Бакула.
найти. -type d -mtime +90 -exec rm {}\;
. можно заменить на путь к каталогу/