Como posso criar um backup de arquivos modificados recentemente no Bash?

2

Eu escrevi este script de backup que examina um arquivo e copia arquivos recentes para uma pasta.

#!/usr/bin/bash

# the number of days to do the backup for.
days=2;

# the files to backup.
location[0]='/opt/location'

# the location to copy the file to
copyLocation='/users/me/Backup/firstBackupScriptTry'

# preform the back up
for i in ${location[*]}
do
        find $i \! -name '*.class' -mtime -$days \! -type d -exec cp {} $copyLocation \;
done

Funciona, mas não é tão útil.

Eu preferiria que o script preservasse a estrutura do diretório quando ele copiasse. Ou seja, eu gostaria que ele fizesse: cp -r from to , mas copie somente os arquivos recentes.

    
por sixtyfootersdude 10.02.2010 / 19:33

3 respostas

1

Uma maneira seria modificar os nomes de arquivos que você obtém ao executar o find. Então, no seu loop, tendo um nome de arquivo encontrado em $ filename, você deve:

  1. Em $ filename, substitua o $ i inicial por nada
  2. descubra o $ dir_name no resultado de 1 usando dirname
  3. acrescente um $ copyLocation final a $ dirname e use-o como argumento para mkdir -p para criar diretórios ausentes
  4. copie $ filename para "$ copyLocation / $ dirname"

Também vou sugerir outra alternativa de sincronização de arquivos: uníssono . É mais fácil de usar do que o rsync.

    
por 10.02.2010 / 21:08
6
O

rsync é feito para esta tarefa. Verifique a página exemplos para uso.

    
por 10.02.2010 / 19:59
1

Um pouco fora do tópico, talvez, mas você pode querer dar uma olhada em BoxBackup . Eu usei scripts rsync por um longo tempo antes de mudar para o BoxBackup, e isso realmente torna as coisas mais fáceis - especialmente o "housekeeping" ...

    
por 10.02.2010 / 20:26