-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathupdate.sh
More file actions
executable file
·134 lines (119 loc) · 4.49 KB
/
update.sh
File metadata and controls
executable file
·134 lines (119 loc) · 4.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/bash
#prendo come parametri le dir e le assegno a due variabili
dir1="$1"
dir2="$2"
parametro="$3"
#funzione per copiare
copia(){
#variabili locali
source="$1"
local destination="$2"
flagR="$3"
flagI="$4"
#ciclo for each per gli elementi presenti
for files in "$source"/*
do
#controllo che il file sia un file regolare
if [[ -f "$files" ]]; then
#controllo che il file esista se non esiste lo copio
if [[ ! (-e "$destination"/"$(basename "$files")") ]]; then
#opzione conferma( solo se il flagI è uguale a 1)
if [[ $flagI == 1 ]]; then
while true; do
echo "Vuoi copiare il file $files in $destination? y/n"
read conferma
case $conferma in
[Yy]* ) cp "$files" "$destination"; break;;
[Nn]* ) break;;
* ) echo "inserisci y(si) o n(no)!!!";;
esac
done
else
#se la flag non è uguale a 1, copia senza chiedere conferma
cp "$files" "$destination"
fi
else
#se il file esiste controllo che quello che voglio copiare sia piu'
#recente di quello nella destinazione, se lo e' lo copio
if [[ "$files" -nt "$destination"/$(basename "$files") ]]; then
#opzione conferma( solo se il flagI è uguale a 1)
if [[ $flagI == 1 ]]; then
while true; do
echo "Vuoi copiare il file $files in $destination? y/n"
read conferma
case $conferma in
[Yy]* ) cp "$files" "$destination"; echo "Copia tipo 2: $files"; break;;
[Nn]* ) break;;
* ) echo "inserisci y(si) o n(no)!!!";;
esac
done
else
#se la flagI non è uguale a 1, copia senza chiedere conferma
cp "$files" "$destination"
fi
fi
fi
fi
#parte ricorsiva se la flagR è uguale a 1
if [[ (-d "$files") && ("$flagR" == 1) ]]; then
#controllo che la cartella non esista gia nella destinazione
#se esiste copio i file richiamando la funzione "copia"
if [[ -e "$destination"/"$(basename "$files")" ]]; then
copia "$source"/"$(basename "$files")" "$destination"/"$(basename "$files")" "$flagR" "$flagI"
else
#se la cartella non esiste nella destinazione la creo
#poi richiamo la funzione "copia"
mkdir "$destination"/"$(basename "$files")"
copia "$source"/"$(basename "$files")" "$destination"/"$(basename "$files")" "$flagR" "$flagI"
fi
fi
done
}
#assegno l'output di dirname a due variabili
full_dir1=$(dirname "$dir1")
full_dir2=$(dirname "$dir2")
#controllo che i parametri inseriti siano due
if [[ "$#" -lt 2 ]]; then
echo "inserisci due parametri!!!"
exit
fi
#controlla che i due parametri siano directory "/home/cristiano/Desktop/Bash/dirA"
if [[ (! -d "$dir1") || (! -d "$dir2") ]]; then
echo "inserisci due directory!!!"
exit
fi
#controllo che non siano link simbolici
if [[ (-L "$dir1") || (-L "$dir2") ]]; then
echo "una o tutte e due le dir sono link simbolici uscita in corso..."
sleep 3
exit
fi
#controllo che le directory non siano una dentro l'altra
if [[ ("$dir2" == "$dir1"/*) || ("$dir1" == "$dir2"/*) ]]; then
echo "le dir sono una dentro l'altra!!!"
exit
fi
#controllo che le directory siano allo stesso livello
if [[ "$full_dir1" != "$full_dir2" ]]; then
echo "le dir non sono allo stesso livello!!!"
exit
fi
#switch case per le opzioni -r -i
case "$parametro" in
#chiamo la funzione in modo ricorsivo
[-R][-r] )
copia "$dir1" "$dir2" "1" "0"
;;
#chiamo la funzione copia con la conferma
[-I][-i] )
copia "$dir1" "$dir2" "0" "1"
;;
#chiamo la funzione con il prompt e la ricorsivita'
-[Rr][Ii]* )
copia "$dir1" "$dir2" "1" "1"
;;
#chiamo la funzione base
*)
copia "$dir1" "$dir2" "0" "0"
;;
esac