Я обычно делаю такое резервное копирование с помощью tar. Вот пример для вашей ситуации:
tar -czf /backup/vault-$(date -I).tar.gz vaults/*
find backup/ -type f -iname "*.tar.gz" -mtime +5 -delete
Здесь с помощью команды tar
мы получаем сжатый архив резервных копий с меткой времени.
Затем с помощью find
мы ищем только файлы, заканчивающиеся на tar .gz в каталоге резервных копий, затем удалите их, если они старше пяти дней.
Но если вы не можете использовать tar и хотите использовать cp и find. Тогда вы уже сделали это почти правильно, но ваша находка должна быть такой:
find backup/ -mindepth 1 -maxdepth 1 -type d -iname "vaults-*" -mtime +5 -exec rm -rf {} \;
Обратите внимание на переключатели mindepth и maxdepth, со значением 1, find выводит только список каталогов резервных копий. Без них find попытается спуститься в каталог после того, как выполнит команду rm
, что приведет к ошибке, как и у вас, или может также попытаться удалить родительский каталог. Также команда rm
должна выполняться с опцией «-rf», чтобы она удаляла также каталоги, которые не пустые, и не пыталась при этом ничего спрашивать.
Вам также следует рассмотреть возможность использования rsnapshot для такого рода резервного копирования. Это сэкономит вам место для хранения, а также обрабатывает удаление на основе политики хранения, которую вы можете настроить самостоятельно.