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