Скрипт автоматического удаления устаревших файлов
В одной компании стояла задача сделать файловый архив-помойку для хранения и пересылки документации в сторонние организации. я накидал на 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