Vediamo creare un elementare sistema di backup in BASH. In questo caso supponiamo di avere, nella posizione in cui viene eseguito il codice, una cartella chiamata elementi, dentro la quale abbiamo tutti i file e le cartelle che desideriamo copiare dentro la destinazione di backup. La destinazione di backup è la medesima dello script (non entro ora nel merito sul buon senso di fare qualcosa di simile) dove verranno create n cartelle consecutive per tutti i backup effettuati. Le cartelle saranno quindi chiamate bck0, bck1 … bckn.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/bash #impostazioni generali source="./elementi" dest="./bck" #contiamo anzitutto le cartelle di backup #che sono già state create tot=0 for el in "$dest*"; do if [ -d "$el" ] then tot=$((tot+1)) fi done #facciamo il backup nella nuova cartella mkdir "$dest$tot/" cp -a "$source/." "$dest$tot/" |
Faccio notare che la prima parte dello script, quella con il ciclo for, serve solo a contare il numero di cartelle di backup attualmente esistenti, per poter creare così la cartella successiva. Se non esiste alcuna cartella il contatore rimane a 0 e crea la prima cartella zeresima, chiamata bck0. Quando si usa la seconda volta le cartelle sono 1, la cartella bck0, e quindi la variabile tot assume valore 1. E così via ad ogni passaggio successivo.
Il backup vero e proprio viene effettuato nell’ultima parte del codice (le ultime due righe), dove creiamo la nuova cartella unendo il nome di dest al numero in tot e poi usiamo il comando cp -a (copia ricorsivamente tutti i file e le cartelle).