Script simplificado para fazer backup e excluir diretórios

0

Eu fiz isso e surpresa, não está funcionando

#!/bin/bash

cd /home/test/backup

cp -a vaults backup/vaults-$(date +%d-%m-%y-%S)

find backup/vaults-* -mtime +5 -exec rm -r {} \;

Eu preciso disso para fazer o backup dos diretórios e, em seguida, excluir todos os diretórios com mais de 5 dias. Exclui tudo e produz coisas como esta

find: 'backup/vaults-27-02-17-41': No such file or directory
    
por Radek Pulkrabek 27.02.2017 / 08:37

1 resposta

2

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.

    
por 27.02.2017 / 08:44