Confuso por este comando 'find' em um script Bash?

8

Eu tenho um script bash, criado por alguém que não é mais capaz de explicar o significado, que é usado para auto TARing de uma pasta e fazer o backup. No momento estou confuso com a linha final:

find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

O script completo está abaixo.

#!/bin/bash
#Purpose = Backup of Important Data
#Created on 17-1-2012
#Author = Hafiz Haider
#Version 1.0
#START
TIME=$(date +"%m-%d-%Y-%T")
FILENAME=pokebrawl-$TIME.tar.gz
SRCDIR=/home/servers/brawl/world
DESDIR=/home/_backups/pokebrawl
tar -cpzf $DESDIR/$FILENAME $SRCDIR
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
#END
    
por Nate Craft 26.07.2018 / 19:53

2 respostas

11

O comando find excluirá qualquer arquivo regular dentro ou abaixo do diretório /home/_backups/pokebrawl com mais de sete dias (ou mais precisamente, não modificado na última semana).

Deve provavelmente ler

find "$DESDIR" -mtime +6 -type f -delete

ou

find "${DESDIR:?Not set correctly}" -mtime +6 -type f -delete

como há uma boa variável mantendo o nome do diretório já. A segunda variação causaria um erro se DESDIR por algum motivo estivesse vazio ou não definido.

Estou assumindo que esta é uma maneira de manter apenas os backups da última semana. Eu sugeriria usar algo como borgbackup ou restic , pois eles poderiam manter os backups por muito mais tempo sem usar muito mais espaço (mesmo os backups por hora de um ano não ocupariam muito espaço se os dados não estava mudando muito). Eles fazem desduplicação de dados e o borgbackup suporta adicionalmente a compactação (ambos suportam backups remotos e criptografia também).

Para executar o script a cada 24 horas (à meia-noite), use um cron job.

Primeiro, emita o comando crontab -e . Isso abriria um editor com o crontab atual para o usuário ativo (isso pode ou não ser um arquivo vazio).

Em seguida, adicione

@daily /path/to/the/script.sh

(onde path/to/the/script.sh é o nome do caminho do script).

Salve e saia do editor.

O roteiro agora seria chamado à meia-noite, mesmo à noite.

Você gostaria de executar o script às 13:30, todas as tardes, adicionar o seguinte como a entrada crontab:

30 13 * * * /path/to/the/script.sh

Veja o manual do crontab no seu sistema para detalhes sobre como escrever um cronograma do crontab ( man 5 crontab ).

    
por 26.07.2018 / 19:58
5
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

Isso localiza todos os arquivos no diretório /home/_backups/pokebrawl que não foram modificados nos últimos +6 dias e os exclui. NOTA: +6 equivale a 7 dias.

Procure em man find para ver como esses switches funcionam:

$ man find
...
   -mtime n
          File's data was last modified n*24 hours ago.  See the comments 
          for -atime to understand how rounding affects the interpretation 
          of file modification times.

Em distribuições Redhat você pode simplesmente colocar este script no diretório /etc/crondaily e ele será executado todos os dias. Você pode ver que existem outros scripts que você pode usar como exemplos:

$ sudo ls -l /etc/cron.daily/
total 12
-rwx------. 1 root root 219 Aug  1  2017 logrotate
-rwxr-xr-x. 1 root root 618 Mar 17  2014 man-db.cron
-rwx------. 1 root root 208 Nov  4  2016 mlocate
    
por 26.07.2018 / 19:58