Come posso script eseguire un backup di file recentemente modificati in Bash?

Ho scritto questo script di backup che guarda in un file e copia i file recenti in una cartella.

#!/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 

Funziona ma non è utile.

Preferirei che lo script conservasse la struttura di directory quando copia. Vorrei che facesse: cp -r from to ma copia solo i file recenti.

Un modo per modificare i nomi di file che si ottiene quando si esegue la ricerca. Quindi, nel tuo ciclo, avendo un nome di file corrispondente in $ filename, dovrai:

  1. In $ filename, sostituire il leader $ i con nulla
  2. scopri il $ dir_name nel risultato di 1 usando dirname
  3. aggiungere una traccia $ copyLocation a $ dirname e utilizzarlo come argomento per mkdir -p per creare directory mancanti
  4. copia nomefile $ a "$ copyLocation / $ dirname"

Voglio anche proporre un'altra alternativa di sincronizzazione dei file: unison . È più facile da usare che rsync.

rsync è fatto per questo task. Controllare la pagina degli esempi per l'utilizzo.

Forse un po 'fuori discussione, ma si potrebbe voler dare un'occhiata a BoxBackup . Ho usato script rsync per molto tempo prima di passare a BoxBackup, e realmente le rende le cose più semplici – specialmente la "pulizia" …