Como sugerido por Fiximan, você provavelmente quer usar a opção -delete
, embora isso não faça nenhuma diferença na sua situação, se você batesse em um nome de arquivo com espaços ou outros caracteres especiais, seu script falharia.
#!/bin/sh -e
BACKUPDIR=/var/backups/files
# I suggest a little more than 1 day (i.e. about 1 week of backups is
# probably safer.)
ROTATE=7
mkdir -p $BACKUPDIR
CURRENT="$BACKUPDIR/'date +%Y-%m-%d'-files.tar.gz"
# Create protected file, then backup data in it
touch $CURRENT
chmod 600 $CURRENT
cd /var/ && tar czf $CURRENT www
# Here we have the attempt at deleting, notice the "+"
find $BACKUPDIR -type f -name '*-files.tar.gz' -mtime +$ROTATE -delete
Algumas coisas:
-
ROTATE=1
parece não fazer muito sentido, você provavelmente quer mais de um backup, apenas por precaução. Você costuma perceber que algo está errado em alguns dias ... boa sorte se você tiver um backup apenas da noite anterior! -
chmod 600 $CURRENT
deve ser feito o mais rápido possível; Se você realmente tem medo da segurança do arquivo, faça-o antes de criar o tarball (como mostrado na minha amostra). -
Corrija o
find
adicionando um+
na frente do número$ROTATE
. Isso é algo que me pega a cada vez, então não se sinta mal. Na verdade, se você usar+
tem a média de mais antiga ou igual , e se você usar '-', o teste será invertido (então-mtime +7
é mais ou menos equivalente a! -mtime -7
- provavelmente dentro de 1 dia entre os quais não é provável que corresponda a um lado ou outro.) Com um número simples como você usou (-mtime 1
), ele excluirá arquivos que foram modificados naquele dia específico. Se esse script não for executado por três dias, esses três arquivos nunca serão excluídos. -
Use o
-delete
para não precisar pensar nas cotações perdidas em seu código de amostra (ou seja,-exec rm "{}" \;
), caso o nome do arquivo inclua caracteres especiais. -
Sugiro que você adicione um
-name
porque você tem uma maneira simples de saber se o arquivo em questão é um backup. Isto é apenas por segurança. Se você nunca colocou nenhum outro arquivo nesse diretório (como uma cópia de um backup que deseja manter por um período mais longo), então não é necessário. -
Adicionar a opção
-e
no hash bang (#!/bin/sh -e
) é uma boa ideia para que o script pare no primeiro erro. Às vezes, os scripts são executados, geram erros e você nunca os vê.