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.