Apaga pastas de backup antigas do diretório usando o cron

0

Estou tentando fazer com que o crontab remova automaticamente as pastas de backup em um diretório, exceto as 6 pastas mais recentes, pois um backup é criado no diretório todos os dias.

Todas as minhas pastas de backup são apenas datestamps, por exemplo: 2017_12_29.

Quando executo rm -rf $(ls -1 /BACKUPDIR/ | head -n -6) de um terminal, ele apaga todas as pastas, exceto as 6 mais recentes, que é o que eu esperava, mas não parece fazer nada quando o crontab o executa e nada é excluído do diretório .

Não tenho certeza de onde estou indo errado.

EDITAR: Atualmente, estou apenas usando o rsync para clonar o diretório /, excluindo alguns diretórios.

Isto é o que parece no crontab do 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)
    
por Jakoski360 29.12.2017 / 23:43

1 resposta

0

Analisar ls não é uma boa ideia , então aqui está uma solução que considero mais estável:

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

Isso só imprime o comando rm para fins de teste, se ele fizer o que você deseja, remover echo e simplesmente adicioná-lo ao seu crontab, por exemplo, para executar todos os domingos às 18:00:

00 18 * * 0 find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 rm -rf
    
por dessert 30.12.2017 / 10:31