O problema é com a combinação da primeira linha do script e o comando rsync
. Vamos dar uma olhada ...
O comando find /backup/staging/ -mtime +7 -exec rm -rf {} \;
remove todos os arquivos e árvores inteiras de diretório onde o arquivo ou raiz da árvore de diretórios não foi modificado por pelo menos sete dias.
Você também está usando rsync -a ...
, que copia os tempos de modificação de arquivos e diretórios.
O resultado líquido é que seu find
corresponderá e removerá arquivos e árvores de diretórios que foram criados há pelo menos sete dias. Normalmente, isso incluirá arquivos do sistema, como /bin/ls
e quase com certeza /
. Você pode verificar com ls -ld /
e confirmar que a data de modificação exibida é há mais de uma semana.
Uma solução seria usar rsnapshot
, que gerencia backups cronometrados e datados extremamente bem. Outro pode ser usar rsync -a ... --delete
, mas no geral eu recomendo rsnapshot
.
Se você realmente quiser rolar sua própria solução, considere algo parecido com este par de comandos:
find /backup/staging -mtime +7 \! -type d -delete
find /backup/staging -depth -type d -exec rmdir {} + 2>/dev/null
Isso removerá todos os não diretórios (ou seja, arquivos, nós de dispositivos, etc.) com mais de sete dias e, em seguida, removerá todos os diretórios vazios.