Я пытаюсь заставить 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)Разбор 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
Разбор 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
Разбор 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