Задать вопрос
@Rollex

Как удалить все кроме одного файла в папке (bash)?

Собираю бекапы бд каждые 15 минут их кладу в папки по дням (пример названия папки: 2021-05-05).
Хочу спустя месяц проходить скриптом по папкам и удалять все файлы кроме одного.
Подскажите как реализовать подобное?
  • Вопрос задан
  • 421 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
TemaSM
@TemaSM
Fullstack, DevOps, InfSec
#!/bin/bash

set -e
export LC_ALL=C
export TZ=Europe/Moscow

# папка с бэкапами
backups_dir="/backups"
# количество дней с момента создания файла/папки, после которого удалять бэкапы
backups_expire_days=30
# название файла (можно использовать маски), который нужно исключить из процесса удаления
filename_to_exclude="myfile.bin"

find "${backups_dir}/"* -ctime "+${backups_expire_days}" \( ! -name "${filename_to_exclude}" \) -exec rm -rf {} \;
# можно подставлять сразу несколько название файлов, пример:
# \( ! -name "myfile.bin" ! -name "*.log" \)

! Данный скрипт выполняет rm -rf, что опасно. Поэтому несколько раз перепроверьте, прежде чем выполнять в той или иной папке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы