Bezpieczeństwo danych to sprawa kluczowa. Jednym z ważniejszych zabiegów jest systematyczne tworzenie kopii bezpieczeństwa czyli tzw. backup. W ramach ćwiczeń w bashu postanowiłem napisać sobie taki mały skrypcik, który po odpaleniu przekopiuje cały katalog domowy mojego użytkownika na zewnętrzny dysk USB.
#!/bin/sh #ustawienia sciezek DEST_PATH="/path/to/my/external/disk" BACKUP_DIR=$DEST_PATH/$(date +%Y-%m-%d-%H:%M) SOURCE_PATH="/home/myuser" #ustawienia domyslne MODE="full" TYPE="tar" #wyswietlenie informacji jezeli bedzie mniej niz 2 argumenty. if [ $# -lt 2 ]; then echo "Usage: `basename $0` <TAR|COPY> <FULL|incremental X days ago>" fi #jezeli podany jest drugi argument w linii polecen, to przystap do analizy if [ ! -z "$2" ]; then case "$2" in FULL|full) MODE=full ;; *) MODE=$2 ;; esac fi #jezeli pierwszy argument nie jest pusty do nalezy go przeanalizowac if [ ! -z "$1" ]; then case "$1" in TAR|tar) TYPE=tar ;; copy|COPY) TYPE=copy ;; esac fi #jezeli katalog docelowy backupu nie istnieje, to nalezy go stworzyc if [ ! -e $BACKUP_DIR ]; then mkdir -p $BACKUP_DIR; fi #funkcja robiaca backup za pomoca tara make_tar_backup () { if [ "$MODE" = "full" ]; then echo "Full backup as archive TAR" tar -zcp -f $BACKUP_DIR/full.tgz $SOURCE_PATH else echo "Incremental backup as archive TAR. $MODE days ago" tar -zcp --newer-mtime "$MODE days ago" -f $BACKUP_DIR/incremental_$MODE.tgz $SOURCE_PATH fi } #funkcja robiaca backup za pomoca cp make_copy_backup () { if [ "$MODE" = "full" ]; then echo "Full backup as save copy" for source_files in $SOURCE_PATH; do echo -e "\tDirectory $source_files" cp --parents -a $source_files $BACKUP_DIR done else echo "Incremental backup as save copy. $MODE days ago" for s in $SOURCE_PATH; do items_list=`find $s -ctime -$MODE` echo -e "\tDirectory $s" if [ ! -z "$items_list" ]; then for item_file in $lista; do cp --parents -a $item_file $BACKUP_DIR done fi done fi } #start pomiaru czasu time_start=$(date +%s); #w zaleznosci od sposobu przechowywania backupu, uruchamiamy odpowiednie funkcje. case "$TYPE" in tar) make_tar_backup ;; copy) make_copy_backup ;; esac time_end=$(date +%s); exec_time=`expr $time_end - $time_start` echo "Backup successfull. Execution time $exec_time seconds" |
Proste ale działa 🙂