Назад | Перейти на главную страницу

Сценарий оболочки Linux: удалить все файлы без «01» в имени

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