Статьи

Bash скрипт для удаления старых файлов

Существует много решений в Linux по хранению бэкапов. Есть и готовые решения в виде программ, есть скрипты. Так уже получилось, что бэкапы складывать в определенную папку задача не сложная (архиватор + cron) но как следить чтобы архивы не плодились? Опять же, есть готовые решения, но я предпочитаю самому управлять процессом. Простой скрип на bash решает проблему удаления старых бэкапов. Например, когда надо, чтобы хранились последние 5 копий, удаляются самые старые файлы бэкапов, а 5 новых остается. Скрипт не блещет гениальными решениями, более того, я уверен, что это можно было сделать проще, но я как новичок в баше сделал это вот так:

#!/bin/bash

#Проверяем количество входных параметров
if [ $# -lt 3 ]
then
 echo Something wrong with parameters
 exit
fi

x=1  # Счетчик файлов
path=$1 # Путь к удаляемым файлам
filemask=$2 # маска файлов
keep=$3 # сколько файлов (бэкапов) надо оставлять

for i in `ls -t $path/$filemask`
        do
          if [ $x -le $keep ]
                then
                ((x++))
                continue
          fi
        rm $i
  done

Запускаю этот скрипт в кроне раз в неделю, например, с такими параметрами: /etc/rotate.sh /var/backup/ etc* 3 Это значит что самые старые файлы, начинающиеся с etc в папке /var/backup, кроме трёх самых свежих, будут удалены.