Eu costumo fazer esse tipo de backup usando o tar. Veja um exemplo para sua situação:
tar -czf /backup/vault-$(date -I).tar.gz vaults/*
find backup/ -type f -iname "*.tar.gz" -mtime +5 -delete
Aqui com o comando tar
, obtemos um arquivo de backup compactado com timestamp.
Então, com find
, procuramos apenas arquivos que terminam com tar.gz no diretório de backup e, em seguida, os excluímos se tiverem mais de cinco dias.
Mas se você não puder usar o tar e quiser usar o cp e o find. Então você já está quase certo, mas seu achado deve ser assim:
find backup/ -mindepth 1 -maxdepth 1 -type d -iname "vaults-*" -mtime +5 -exec rm -rf {} \;
Observe que os switches mindepth e maxdepth, com eles tendo o valor 1, localizam apenas as listas dos diretórios de backup. Sem eles, o find tentará entrar no diretório depois de ter executado o comando rm
, resultando em um erro como o que você teve ou também pode tentar excluir o diretório pai. Além disso, o comando rm
deve ser executado com as opções "-rf", de modo que ele remova também os diretórios que não estão vazios e não tentará perguntar nada ao fazê-lo.
Você também deve considerar o uso de rsnapshot para esse tipo de backup. Isso economizaria um pouco de espaço de armazenamento e também lidaria com a exclusão com base na política de retenção que você mesmo pode configurar.