Удаление старых резервных копий из каталога с помощью cron

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

Все мои резервные папки - это только datestamps например: 2017_12_29.

Когда я запускаю rm -rf $(ls -1 /BACKUPDIR/ | head -n -6) с терминала, он удаляет все папки, кроме последних 6, что я ожидаю от него, но он ничего не делает, когда выполняется crontab это и ничего не удаляется из каталога.

Я не уверен, где я здесь не так.

EDIT: В настоящее время я просто использую rsync для клонирования каталога / за исключением нескольких каталогов.

Это то, что похоже на crontab root:

00 22 * * * /usr/bin/rsync -aqvHAXS --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /tmp/ --exclude /run/ --exclude /mnt/ --exclude /media/ --exclude /lost+found/ --delete / /BACKUPDIR/$(date +\%Y_\%m_\%d)
0
задан 30 December 2017 в 17:25

3 ответа

Разбор ls не является хорошей идеей, поэтому вот решение, которое я считаю более стабильным:

find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 echo rm -rf

Это просто печатает команду rm для целей тестирования, если она делает то, что вы хотите удалить echo и просто добавить его в свой crontab, например для запуска каждое воскресенье в 18:00:

00 18 * * 0 find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 rm -rf
0
ответ дан 22 May 2018 в 15:51
  • 1
    Разрешения могут все еще быть проблемой, если это, например, а не корень crontab, а пользователи. – derHugo 30 December 2017 в 16:18
  • 2
    @derHugo OP выполняет rm -rf с терминала, и он работает. Я принимаю это, поскольку разрешения на регистрацию здесь не являются проблемой. – dessert 30 December 2017 в 16:24
  • 3
    Я только что добавил это в crontab root, и это сработало отлично, я вижу, где я ошибался, анализируя ls. Отмечено как правильный ответ спасибо за помощь. – Jakoski360 30 December 2017 в 17:40

Разбор ls не является хорошей идеей, поэтому вот решение, которое я считаю более стабильным:

find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 echo rm -rf

Это просто печатает команду rm для целей тестирования, если она делает то, что вы хотите удалить echo и просто добавить его в свой crontab, например для запуска каждое воскресенье в 18:00:

00 18 * * 0 find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 rm -rf
0
ответ дан 18 July 2018 в 00:13

Разбор ls не является хорошей идеей, поэтому вот решение, которое я считаю более стабильным:

find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 echo rm -rf

Это просто печатает команду rm для целей тестирования, если она делает то, что вы хотите удалить echo и просто добавить его в свой crontab, например для запуска каждое воскресенье в 18:00:

00 18 * * 0 find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 rm -rf
0
ответ дан 24 July 2018 в 17:10

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

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