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

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

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

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

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

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

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

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

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

Скрипт

delete-files.sh
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env -S bash -e
#
# Script for automatically deleting outdated files.
#
# @package    Bash
# @author     Kai Kimera <mail@kai.kim>
# @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

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

Терминал
1
delete-files.sh "3" "/path/to/storage"

Где:

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

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

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

1
2
# 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
Теги
Авторы
Мета
Лицензия
ID файла
UUID
Системный путь
Тип
Статистика
Количество слов
Время чтения
мин.