Скрипт автоматического удаления устаревших файлов
В одной компании стояла задача сделать файловый архив-помойку для хранения и пересылки документации в сторонние организации. Я накидал на PHP самописный интерфейс для загрузки файлов, а на bash’е сделал скрипт автоматического удаления устаревших файлов. Небольшая заметка об этом скрипте.
Скрипт для удаления устаревших файлов очень прост, написан на bash’е и основывается на утилите find
. Утилита find
имеет опцию -mtime
, при помощи которого можно сделать выборку файлов по времени изменения:
Здесь мы говорим утилите find
, что необходимо найти и показать файлы, у которых с даты последнего изменения прошло более 3 дней. Если необходимо вывести файлы, дата изменения которых будет менее 3
дней, то ставим отрицательное значение -3
.
Далее, конструируем конвейер, и при помощи xargs
указываем команду удаления rm -f
:
Сам скрипт провожу ниже.
Скрипт
#!/usr/bin/bash -e
#
# Script for automatically deleting outdated files.
#
# @package Bash
# @author Kitsune Solar <mail@kitsune.solar>
# @copyright 2023 Library Online
# @license MIT
# @version 0.1.0
# @link https://lib.onl/ru/articles/2021/08/ca744dce-e607-52e6-9952-8ae04e052a5b/
# -------------------------------------------------------------------------------------------------------------------- #
days="${1}"
dir="${2}"
find "${dir}" -type f -mtime +${days} -print0 | xargs -0 rm -f
exit 0
В скрипте я вынес некоторые значения в переменные для удобной перенастройки. Вызывается скрипт следующем образом:
Где:
3
- количество дней, прошедших с момента последнего изменения файла./path/to/storage
- путь к файловому хранилищу, в котором необходимо удалять устаревшие файлы.
Автоматический запуск по расписанию
Осталось добавить выполнение скрипта по cron’у. Я указал время 23:59
, когда нагрузка на файловое хранилище минимальна: