Задать вопрос
@gnusy
программист

вопрос по bash

имеются бэкапы с таким названием: backup-YYYMMDD.tar.gz. делаются ежедневно. надо написать скрипт, который удаляет файлы, которые сделаны ранее, например, семи дней назад. помогите пожалуйста.
  • Вопрос задан
  • 2696 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 6
ob1
@ob1
Вот небольшой скрипт. Не проверял. Допилите сами?

#!/bin/sh

DAY=7
TDIR=ltmp

mkdir ${TDIR}

while [ ${DAY} -ge 0 ]; do
    mv backup-`date -d "${DAY} day ago" +%Y%m%d`.tar.gz ${TDIR}
    let DAY=${DAY}-1
done

rm -f backup-*.tar.gz
mv ${TDIR}/backup-*.tar.gz .
rmdir ${TDIR}
Ответ написан
Комментировать
@Monca
Делай циклические бекапы, в имени не будет даты и самый новый будет затирать самый старый.
Ответ написан
iSage
@iSage
find -type f -mtime 7 -execdir rm -f {} \;

например.
man find
Ответ написан
Maxim_ka
@Maxim_ka
Системный инженер
Когда-то я использовал вот такой скриптик, для очистки директории var от ненужного, посмотрите его, и переделайте так как Вам удобно.

#cleanup
#Для работы программы требуются права root.
LOG_DIR=/var/log
LOG_SQUID_DIR=/var/log/squid
ROOT_UID=0 #Только пользователь с &UID 0 имеет привилегии root.
LINES=10 #Количество сохроняемых строк по-умолчанию.
E_XCD=66 #Невозможно сменить каталог?
E_NOTROOT=67 #Признак отсутствия root-привилегий.

if [ "$UID" -ne "$ROOT_UID" ]
then
echo "Для работы сценария требуются права root."
exit $E_NOTROOT
fi

if [ -n "$1" ]
# Полная наличия аргумента командной строки.
then
lines=$1
else
lines=$LINES #Значение по-умолчанию, если число не заданно в командной строке
fi

cd $LOG_DIR
if [ `pwd` != "$LOG_DIR" ]
then
echo "Невозможно перейти в католог $LOG_DIR."
exit $E_XCD
fi # Проверка каталога перед очисткой лог-файлов.

tail -$lines messages > mesg.temp # Сохранить последние строки в log-файле
mv mesg.temp messages

cat /dev/null > wtmp
echo "Лог-файлы очищенны."

cd $LOG_SQUID_DIR
if [ `pwd` != "$LOG_SQUID_DIR" ]
then
echo "Невозможно перейти в катало $LOG_SQUID_DIR."
exit $E_XCD
fi # Проверка каталога перед очисткой лог-файла.

tail -$lines access.log > mesg.temp
mv mesg.temp access.log
tail -$lines cache.log > mesg.temp
mv mesg.temp cache.log
tail -$lines store.log > mesg.temp
mv mesg.temp store.log
rm -rf *.gz

exit 0
Ответ написан
Комментировать
rssdoor
@rssdoor
эта тема не связана с заливкой на дропбокс?
Ответ написан
Комментировать
@Eddy_Em
А вы не пробовали logrotate на эти бэкапы настроить?
Он, все-таки, не только ротировать логи умеет…
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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