Сценарий Bash, чтобы удалить папки, более старые, чем 30 дней, но опустить 1-й и 15-й

У меня есть монтирование, где я храню свои резервные копии дб, и избегать его растущий вне управления, я только предназначаю при хранении ценности 30 дней резервных копий, но также и резервных копий, создаваемых каждые 15 дней. Таким образом, как 30 дней истекает, если бы папка была создана на 1-м или 15-м, то я хотел бы, чтобы она осталась также.

Я в настоящее время использую это, чтобы только сохранить резервные копии в течение 30 дней, как я могу опустить папки, созданные на 1-м и 15-м?

find /mnt/clusterfs01-data01/db01/* -type d -ctime +30 -exec rm -rf {} \;

Демонстрационный список каталогов для имен папок.

0 drwx------ 7 root root 324 Nov 11 01:35 2016-11-11_01-31-41
0 drwx------ 7 root root 250 Nov 11 06:25 2016-11-11_06-25-03

Я не возражаю против решения кроме find.

1
задан 11 November 2016 в 19:38

2 ответа

Для исключения соответствий на основе строки даты и времени имени каталога Вы могли добавить

! \( -name '????-15-??*' -o -name '????-30-??*' \)

или

-not \( -name '????-15-??*' -o -name '????-30-??*' \)

к эти find команда.

, Если Вы действительно хотите основывать его на метке времени, затем единственный путь, я могу думать, чтобы сделать, который является чем-то как ( примечание , которое я использую mtime здесь начиная с Вашего touch, команды, кажется, не изменяют ctime в моей системе: изменение %Td к %Cd для ctime):

find dir -type d -mtime +30 -printf '%Td\t%p\0' | 
    while read -rd '' day dir; do 
      case "$day" in 
        15|30) ;; 
        *) echo rm -rf -- "$dir";; 
      esac
    done
2
ответ дан 7 December 2019 в 12:37

Попробуйте этого:

rm -rf $(find /mnt/clusterfs01-data01/db01/* -maxdepth 0 -type d -ctime +30 | grep -v "[0-9]\{4\}-01\|15-[0-9]\{2\}")
1
ответ дан 7 December 2019 в 12:37

Другие вопросы по тегам:

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