Я пытаюсь, чтобы crontab автоматически удалял папки резервных копий в каталоге, кроме самых последних 6 папок, поскольку резервная копия создается в каталоге каждый день.
Все мои папки с резервными копиями - просто метки даты, например: 2017_12_29.
Когда я запускаю rm -rf $(ls -1 /BACKUPDIR/ | head -n -6)
из терминала, он удаляет все папки, кроме самых последних 6, что я и ожидаю, но он ничего не делает, когда запускает его crontab и ничего не удаляется из каталога .
Я не уверен, куда я иду не так.
РЕДАКТИРОВАТЬ: В настоящее время я просто использую 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)
Синтаксический анализ 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