Я хочу удалить резервные копии старше 7 дней, но сохраняю первое число каждого месяца.

Имя файла: name_$(date +\%d\%m\%Y).tar.gz

Я хочу сохранить: name_$(date +\01\%m\%Y).tar.gz

Я хочу что-то вроде этого:

find /path -mtime +8 -exec rm {} \;

Где я могу вписать name_$(date +\01\%m\%Y).tar.gz?

Возможно, используйте --exclude name_$(date +\01\%m\%Y).tar.gz

Я ищу однострочную команду.

Не хочу подкаталоги.

Попробовал его с эхом, он не работает нормально, но показывает somw of 01.

--exclude просто не работает: command not found

1 ответ1

1

Это работает для меня в Debian/Ubuntu (и должно работать в большинстве):

Например, если у вас есть файлы в следующем формате:

mybackup_ 12-01-2015.tar.gz

 $ find ./* -name 'mybackup_??-01-*' -prune -o -mtime +7 -exec ls {} \;

Команда:

  • Найти все файлы, начиная с текущей папки
  • Удалите (не считая / исключая) файлы с датой совпадения '01'
  • и только включая файлы ≥7 дней (mtime)
  • Выполните ls чтобы показать, что осталось.

Если вы хотите удалить их после команды тестирования, просто замените ls на rm .

Когда вы довольны командой, она также хорошо работает как задание / задание cron. Я выполняю свой сценарий раз в пару месяцев. (мой скрипт использует время mtime +90 дней для очистки резервных копий mysql)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .