Pagina 1 di 1

Aiuto per semplice script bash

Inviato: gio 25 feb 2016, 1:52
da samiel
Ho uno script che mi fa il backup di svariate directory su una chiavetta USB, ma volevo perfezionarlo in modo che raccogliesse le directory di origine come subdirectory di directory principali. Forse la cosa risulta più chiara se inserisco lo script che non funziona:

Codice: Seleziona tutto

#!/bin/bash
USER=`whoami`
mkdir -p /media/$USER/CORSAIR/samiel/
mkdir -p /media/$USER/CORSAIR/fonts/
mkdir -p /media/$USER/CORSAIR/slackware/
mkdir -p /media/$USER/CORSAIR/software/
SOURCE=( ~/.abook ~/.vimrc ~/argomentare ~/articoli ~/bibliografie ~/cataloghi )
TARGET="/media/$USER/CORSAIR/samiel/"
SOURCE=( /mnt/archive/fonts )
TARGET="/media/$USER/CORSAIR/fonts/"
SOURCE=( /mnt/archive/software )
TARGET="/media/$USER/CORSAIR/software/"
date=`date "+%y-%M-%D"` # %H_%M per avere anche l'orario
# Tag dei log scritti in /var/log/messages
TAG="backup_full"
rsync -rvuz --delete --delete-after --progress ${SOURCE[@]} $TARGET
Le directory principali vengono create, ma poi viene effettuato solo il backup dell'ultima.
Si accettano suggerimenti...

grazie
m

Re: Aiuto per semplice script bash

Inviato: gio 25 feb 2016, 7:43
da conraid
Perché il comando usa solo l'ultima variabile. È come se sovrascrivessi la variabile con un'altra quando la dichiari nuovamente.

O usi qualche ciclo (per esempio numerando le variabili/array e poi un for), oppure semplicemente dopo ogni target fai il sync, tipo

Codice: Seleziona tutto

SOURCE=( ~/.abook ~/.vimrc ~/argomentare ~/articoli ~/bibliografie ~/cataloghi )
TARGET="/media/$USER/CORSAIR/samiel/"
rsync -rvuz --delete --delete-after --progress ${SOURCE[@]} $TARGET
SOURCE=( /mnt/archive/fonts )
TARGET="/media/$USER/CORSAIR/fonts/"
rsync -rvuz --delete --delete-after --progress ${SOURCE[@]} $TARGET
SOURCE=( /mnt/archive/software )
TARGET="/media/$USER/CORSAIR/software/"
rsync -rvuz --delete --delete-after --progress ${SOURCE[@]} $TARGET

Re: Aiuto per semplice script bash

Inviato: gio 25 feb 2016, 15:32
da samiel
La seconda soluzione è in effetti elementare-
La seconda mi sembra assai più elegante:: ma come dovrei "numerare" le variabili?

grazie
m

Re: Aiuto per semplice script bash

Inviato: gio 25 feb 2016, 20:52
da targzeta
Non so se questo funziona ma ti evita anche di crearti prima le directory di destinazione:

Codice: Seleziona tutto

#!/bin/bash
USER=`whoami`

declare -A BACKUP_INFOS
BACKUP_INFOS=(
  [/media/$USER/CORSAIR/samiel/]="~/.abook ~/.vimrc ~/argomentare \
                                  ~/articoli ~/bibliografie ~/cataloghi"
  [/media/$USER/CORSAIR/fonts/]="/mnt/archive/fonts"
  [/media/$USER/CORSAIR/software/]="/mnt/archive/software"
)

for dest_dir in "${!BACKUP_INFOS[@]}"
do
  echo mkdir "$dest_dir"
  src="${BACKUP_INFOS[$dest_dir]}"
  echo rsync $src "=>" "$dest_dir"
done
(ovviamente ci ho messo delle stampe tanto per vedere un po'. I comandi veri devi vederteli tu :))
Emanuele

Re: Aiuto per semplice script bash

Inviato: ven 26 feb 2016, 20:43
da samiel
Grazie funziona, tranne un dettaglio che non so bene come interpretare.
Tengo i file di script per fare i backup e altri per installare in automatico delle cose
nella directory ~/system_files. Lancio da qui lo script:

Codice: Seleziona tutto

#!/bin/bash
USER=`whoami`

declare -A BACKUP_INFOS
BACKUP_INFOS=(
  [/media/$USER/CORSAIR/samiel/]="/home/samiel/.abook 
  /home/samiel/argomentare /home/samiel/articoli /home/samiel/bibliografie"
#  [/media/$USER/CORSAIR/fonts/]="/mnt/archive/fonts"
  [/media/$USER/CORSAIR/software/]="/mnt/archive/software/epson"
)

for dest_dir in "${!BACKUP_INFOS[@]}"
do
  echo mkdir "$dest_dir"
  src="${BACKUP_INFOS[$dest_dir]}"
  rsync -rvuz --delete --delete-after --progress $src "=>" "$dest_dir"
done
e ottengo

Codice: Seleziona tutto

samiel@darkstar:~/system_files$ bash try.sh 
mkdir /media/samiel/CORSAIR/samiel/
building file list ... 
rsync: link_stat "/home/samiel/system_files/=>" failed: No such file or directory (2)
645 files to consider

sent 14,177 bytes  received 11 bytes  28,376.00 bytes/sec
total size is 24,219,445  speedup is 1,707.04
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]
mkdir /media/samiel/CORSAIR/software/
building file list ... 
rsync: link_stat "/home/samiel/system_files/=>" failed: No such file or directory (2)
15 files to consider
                                                                                                                                                                                                                                            
sent 540 bytes  received 11 bytes  1,102.00 bytes/sec                                                                                                                                                                                       
total size is 2,403,889  speedup is 4,362.77                                                                                                                                                                                                
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.1]

m

Re: Aiuto per semplice script bash

Inviato: ven 26 feb 2016, 21:14
da targzeta
Ma, ovviamente è sbagliato. Io ti avevo passato un echo di esempio quel '=>' non ha senso per rsync :)
Il comando dovrebbe essere:

Codice: Seleziona tutto

rsync -rvuz --delete --delete-after --progress $src "$dest_dir"
Emanuele

Re: Aiuto per semplice script bash

Inviato: sab 27 feb 2016, 14:36
da samiel
non me n'ero accorto... :(
così mi pare funzioni benissimo

grazie
m

Re: Aiuto per semplice script bash

Inviato: lun 18 lug 2016, 16:11
da Linpassion
La butto la! Se nello script comprimi in zip la Homee poi copi il file zip su usb?

Re: Aiuto per semplice script bash

Inviato: mar 19 lug 2016, 10:04
da samiel
Non ho capito bene. comunque in generale sì che puoi comprimere la home e copiarla.
Ma a me interessava un backup selettivo e non compresso, cosi da essere disponibile
subito da qualsiasi PC...

m