Скрипт автоматического удаления устаревших файлов

В одной компании стояла задача сделать файловый архив-помойку для хранения и пересылки документации в сторонние организации. я накидал на PHP самописный интерфейс для загрузки файлов, а на bash’е сделал скрипт автоматического удаления устаревших файлов. Небольшая заметка об этом скрипте.

Скрипт для удаления устаревших файлов очень прост, написан на bash’е и основывается на утилите find. Утилита find имеет опцию -mtime, при помощи которого можно сделать выборку файлов по времени изменения:

find "/home/user" -type f -mtime +3

Здесь мы говорим утилите find, что необходимо найти и показать файлы, у которых с даты последнего изменения прошло более 3 дней. Если необходимо вывести файлы, дата изменения которых будет менее 3 дней, то ставим отрицательное значение -3.

Далее, конструируем конвейер, и при помощи xargs указываем команду удаления rm -f:

find "/home/user" -type f -mtime +3 -print0 | xargs -0 rm -f

Сам скрипт провожу ниже.

Скрипт

#!/usr/bin/bash
# name: delete-files.sh

days="${1}"
dir="${2}"

find "${dir}" -type f -mtime +${days} -print0 | xargs -0 rm -f

exit 0

В скрипте я вынес некоторые значения в переменные для удобной перенастройки. Вызывается скрипт следующем образом:

user@localhost ~ % delete-files.sh "3" "/path/to/storage"

Где:

  • 3 - количество дней, прошедших с момента последнего изменения файла.
  • /path/to/storage - путь к файловому хранилищу, в котором необходимо удалять устаревшие файлы.

Автоматический запуск по расписанию

Осталось добавить выполнение скрипта по cron’у. Я указал время 23:59, когда нагрузка на файловое хранилище минимальна:

# Check & remove old files in 23:59 every day.
59 23 * * * [username] /usr/bin/bash /path/to/delete-files.sh "3" "/path/to/storage" > /dev/null 2>&1

Категории

Теги

Meta

  • ID файла
  • UUID
  • Системный путь
  • Тип
  • Количество слов
  • Время чтения (мин.)