Grazie frafra per i tuoi suggerimenti, ma quando ho letto, le tue risposte avevo già definito lo script che mi necessitava per determinare automaticamente i nomi degli sd attributi dal sistema alle partizioni del disco esterno in cui eseguire il cp dei tre file dati contenuti in altrettante partizioni del secondo disco interno in cui risiedono i salvataggi giornalieri dei miei dati originari.
La procedura che ho messo su alcuni mesi or sono prevede un salvataggio giornailero su una partizione fra le tre create sul 2° disco interno del pc. Alternativamente eseguo un cp su sdc2 (1° giorno), sdc3 (2* giorno) e sdc4 (3* giorno). Il ciclo ricomincia da sdc2 il 4° giorno. Poi settimanalmente, solitamente il Venerdì sera, eseguo un cp di sdc2, sdc3 e sdc4 in altrettanti sd di un disco esterno che connetto per l’occasione al pc, tramite una delle 4 porte usb presenti sul frontale del tower del pc, però poichè detti sd non prendono sempre lo stesso nome (a volte sdh1/2/3, a volte sdi1/2/3, a volte sdg1/2/3) il mio vecchio script non funzionava sempre. Mi serviva perciò individuare automaticamente il nome attribuito dal sistema al momento della connessione dell’unità esterna al pc.
Ho allora modificato opportunamente lo script, in base alle mie modeste conoscenze dell’ambiente bash, e lo script che ho messo a regime oggi e così redatto:
[code]
#!/bin/bash
l’opzione -x permette di vedere ogni singolo comando eseguito dalla bash
Script ‘bkpsettim.sh’ per:
avvio automatico della mia procedura bash di
------------------------ SALVATAGGIO SETTIMANALE DATI ------------------------
data fine script: 14-mag-2016
#set -x # Visualizza tutti i comandi prima della loro esecuzione.
clear
echo “SALVATAGGIO SETTIMANALE DATI”
cd ~/mont/dativari/contabfam
Scelta=“N”
while “$Scelta” != “SI” ] # diverso da
do
echo “SPEGNI unità DISK esterna”
echo “rispondi: ‘SI’ e”
echo “-------- PREMI INVIO --------”
read Scelta
echo “hai risposto: $Scelta”
echo
done
ls -l /dev/disk/by-uuid > /home/piero/Scrivania/locaz_partiz.txt
Scelta=“N”
while “$Scelta” != “SI” ]
do
echo “ACCENDI E CONNETTI ad una porta usb unità DISK esterna”
echo “rispondi: ‘SI’ e”
echo “---------------------- PREMI INVIO ---------------------”
read Scelta
echo “hai risposto: $Scelta”
echo
done
ls -l /dev/disk/by-uuid >> /home/piero/Scrivania/locaz_partiz.txt
sort /home/piero/Scrivania/locaz_partiz.txt | uniq -u > /home/piero/Scrivania/partiz_bkp.txt
riga=
let ind=0
flnmpartiz=/home/piero/Scrivania/partiz_bkp.txt
declare -a TbRec #dichiarazione di una tabella in memoria
while read riga
do
TbRec[ind]="$riga"
let “ind+=1”
done < $flnmpartiz
let ind=0
let TotEle=${#TbRec*]}
while “$ind” < “$TotEle” ]
do
let lungh=${#TbRec[ind]}
let pos=lungh-3
echo expr "${TbRec[ind]}" : '\(....\)'
# ESTRAZIONE DEI PRIMI 4 CRT --> funziona
Strimia=`expr substr "${TbRec[ind]}" $pos 4` # ESTRAZIONE DI 4 crt, a partire dal 87/mo --> funziona
TbRec[ind]=$Strimia
let ind+=1
done
#---------------------------- odinamento TbRec ------------------------------------------
let ind=0
let fine=“0”
scamb=“n”
let UltElem=$TotEle-1
while $fine = “0” ]
do
if ${TbRec[ind]} > ${TbRec[ind+1]} ]]
then
Strimia=${TbRec[ind]}
TbRec[ind]=${TbRec[ind+1]}
TbRec[ind+1]=$Strimia
scamb=“s”
fi
let ind+=1
if $ind = $UltElem ]]
then
if $scamb = “s” ]]
then
let scamb=“n”
let ind=0
else
let fine=“1”
fi
fi
done
#------------------------- Fine ordinamento ----------------------------
#let ind=0
#for ((ind=0;ind<"$TotEle";++ind))
#do
echo
echo “TbRecRiga$ind: ${TbRec[ind]}”
#done
let ind=0
sdInput=
echo “AVVIO salvataggio di: sdc2 -> ${TbRec[ind]}”
echo " sdc3 -> ${TbRec[ind+1]}"
echo " sdc4 -> ${TbRec[ind+2]}"
echo “digita: ‘SI’ per PROSEGUIRE”
echo " ‘N’ per USCIRE"
read Scelta
echo “hai digitato: $Scelta”
if $Scelta != “SI” ]]; then
exit 0
fi
OraIni=$(date +%H)
MinutIni=$(date +%M)
for ((ii=2;ii<5;++ii))
do
sudo mount /dev/“sdc$ii” /home/piero/devinput
ls /home/piero/devinput
for nomefile in /home/piero/devinput/*
do
strimia="${nomefile##*/}"
if "${strimia: 0: 8}" == "dativari" ]]; then
strimia1="/home/piero/devinput/$strimia"
strimia2="/home/piero/mntpartbkp/$strimia"
sudo mount /dev/${TbRec[ind]} /home/piero/mntpartbkp
ls /home/piero/mntpartbkp
echo "-----------------------------------------------------------------------------"
echo
echo "Inizio salvataggio di: sdc$ii -> ${TbRec[ind]} - ore: $(date +%k:%M)"
echo "dal file: $strimia1"
echo "al file: $strimia2"
sudo rm -rf /home/piero/mntpartbkp/dativari*
ls /home/piero/mntpartbkp
sudo cp -a /home/piero/devinput/$strimia /home/piero/mntpartbkp/$strimia
sudo umount /home/piero/devinput
sudo umount /home/piero/mntpartbkp
OraFin=$(date +%H)
MinutFin=$(date +%M)
echo "FINE salvataggio - ore: $OraFin:$MinutFin"
let ind+=1
fi
done
done
echo
if $OraFin == 0 ]]; then
OraFin=24
fi
if $MinutFin < $MinutIni ]]; then
let OraFin-=1
let MinutFin+=60
fi
let DuraMin=$MinutFin-$MinutIni
let DuraOre=$OraFin-$OraIni
echo “Durata complessiva del salvataggio: $DuraOre:$DuraMin”
echo “-----------------------------------------------------------------------------”
exit 0[/code]
Lo script ora funziona perfettamente e svolge il suo lavoro in poco più di 30’.
Sono perciò pienamente soddisfatto del risultato che sono riuscito ad ottenere, grazie anche all’aiuto ricevuto da arkanoid.
Come avevo promesso ho pubblicato qui lo script.
Grazie ancora a tutti e due.