У меня есть сценарий резервного копирования, который создает файлы с именем дня создания в формате backups_ГГГГММДД.tar.gz
В настоящее время я очищаю все, что старше 30 дней, с помощью такой команды:
find /backups -mtime +30 -name "backups_????????.tar.gz" -delete
Как я могу изменить это, чтобы очищать только файлы, которые НЕ были созданы в первое число месяца? то есть все, что соответствует "backups _ ?????? 01.tar.gz", остается.
Вы можете сделать это с помощью простого подстановки точно так же, как сейчас:
find /backups -mtime +30 -name "backups_????????.tar.gz" ! -name "backups_??????01.tar.gz" -delete
«Найдите файлы старше 30 дней, которые имеют имя FOO, а не BAR, и удалите их».
Предполагая, что вы заметили, но резервные копии файлов во всех каталогах ниже, вы можете сделать что-то вроде:
find . -type f -regextype posix-egrep ! -regex ".*backups_[0-9]{6}01.tar.gz" -name '*.tar.gz' -print0 | xargs -0 rm
Трудно сказать точно, не зная всех файлов в этих каталогах, поэтому сначала запустите его без rm! Возможно, вы захотите изменить последний глобус * .tar.gz на что-то более близкое к исходному глобу.