Als `pdf` - karelzimmer.nl

Download Report

Transcript Als `pdf` - karelzimmer.nl

Bestand: /home/karel/scripts/archive
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
Pagina 1 van 8
#!/bin/bash
#############################################################################
# Bestand: archive
#
# Doel:
Archiveer checklists, scripts, en overige bestanden.
#
# Gebruik: In het terminalvenster:
#
#
archive [OPTIES] [ARGUMENTEN]
#
#
Gebruik optie --usage of --help voor meer informatie.
#
# Gebruikt: script-common.sh (algemene variabelen en functies)
#
# Auteur:
Karel Zimmer (http://karelzimmer.nl, [email protected])
#
# ------------------------------------------------------------------------- #
# Auteursrecht © 2013-2016 Karel Zimmer.
#
#
#
# Dit programma is vrije software: u mag het herdistribueren en/of wijzigen #
# onder de voorwaarden van de GNU Algemene Publieke Licentie zoals
#
# gepubliceerd door de Free Software Foundation, onder versie 3 van de
#
# Licentie of (naar uw keuze) elke latere versie.
#
#
#
# Dit programma is gedistribueerd in de hoop dat het nuttig zal zijn maar
#
# ZONDER ENIGE GARANTIE; zelfs zonder de impliciete garanties die
#
# GEBRUIKELIJK ZIJN IN DE HANDEL of voor BRUIKBAARHEID VOOR EEN SPECIFIEK
#
# DOEL. Zie de GNU Algemene Publieke Licentie voor meer details.
#
#
#
# U hoort een kopie van de GNU Algemene Publieke Licentie te hebben
#
# ontvangen samen met dit programma. Als dat niet het geval is, zie
#
# http://www.gnu.org/licenses/.
#
# ------------------------------------------------------------------------- #
# Versies: 1.0.0
2013-04-23 Eerste versie.
#
#
2.0.0
2014-01-27 Gelijkmaken archiefmappen verwijderd, laten #
#
we over aan script deploy.
#
#
3.0.0
2014-10-19 Archiveren en verwijderen in 1 gang.
#
#
4.0.0
2014-12-28 Alle bestanden te archiveren en meerdere
#
#
bestanden op te geven als argument.
#
#
5.0.0
2015-07-08 Hernoemd (-/- .sh).
#
#
6.0.0
2015-08-06 Argument archiefbestand aangepast.
#
#
7.0.0
2016-05-20 Van eigen log naar system log en systemd
#
#
journal.
#
#############################################################################
readonly VERSION_NUMBER=7.4.1
readonly RELEASE_DATE=2016-10-03
#############################################################################
# Instellingen
#
#############################################################################
#---------------------------------------------------------------------------#
# Algemene instellingen
#
# ------------------------------------------------------------------------- #
# Lees de algemene variabelen en functies in.
#
#---------------------------------------------------------------------------#
source "$(dirname "$0")"/script-common.sh &> /dev/null ||
{
echo 'Het algemeen scriptbestand (script-common.sh) is niet gevonden'
echo "of bevat fouten. Is 'wget karelzimmer.nl/s;. s' uitgevoerd?"
echo 'Zie voor informatie http://karelzimmer.nl en klik op LEESMIJ.'
exit 1
}
#---------------------------------------------------------------------------#
# Globale constanten
#
#---------------------------------------------------------------------------#
# Algemeen ==================================================================
readonly SCRIPT_NEEDS_SUDO=false
# Geen beheerdersrechten nodig
readonly FIRST_COPYRIGHTYEAR=2013
# Eerste auteursrechtjaar
readonly OPTION_NEEDS_ARG=false
# Geen optie met een verplicht argum.
readonly OPTIONS_HELP=$(cat << OPTIONS_HELP
Bestand: /home/karel/scripts/archive
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
Pagina 2 van 8
BESTAND
zoek en verwerk bestand BESTANDen
OPTIONS_HELP
)
# Extra hulp-opties
readonly OPTIONS_USAGE=$(cat << OPTIONS_USAGE
[BESTAND...]
OPTIONS_USAGE
)
# Extra gebruiks-opties
# Specifiek =================================================================
# Archiveermappen:
readonly ARCH_FROM=$HOME/uploads/data/linux
readonly ARCH_TO=$HOME/uploads/data-archief/linux-archief
readonly DEL_FROM_1=$XDG_DOCUMENTS_DIR/Checklists
readonly DEL_FROM_2=$HOME/scripts
# Foutcodes =================================================================
readonly E_DIR_NOT_FOUND=64
#---------------------------------------------------------------------------#
# Globale variabelen
#
#---------------------------------------------------------------------------#
# Array, integer ============================================================
# Boolean ===================================================================
declare ARG_FILE=false
# Argument archiefbestand opgegeven
declare CHANGED=false
# Wijzigingen aangebracht
declare NO_FILES_FOUND=true
# Geen bestanden gevonden
# Overig ====================================================================
declare ARG_FILE_ARGVAL=''
# Argument archiefbestand
# argumentwaarde
declare ARCH_TO_COMPLETED=''
# Aangevulde archiefmap
declare SEARCH4=''
# Zoekargument bestanden
declare SRCH4_PART1=''
# Zoekargument bestanden deel 1
declare SRCH4_PART2=''
# Zoekargument bestanden deel 2
declare SRCH4_PART3=''
# Zoekargument bestanden deel 3
#############################################################################
# Functies
#
#############################################################################
#-Functie-------------------------------------------------------------------#
# Naam: toon_hulp
#
# Doel: Uitleg werking script.
#
# Arg.: Geen argumenten.
#
#---------------------------------------------------------------------------#
toon_hulp() {
log "$PROGNAME:$FUNCNAME:$LINENO"
toon_gebruik_sc $OPTION_USAGE
cat << HULP
Archiveer checklists, scripts, en overige bestanden.
$OPTIONS_HELP_SC$OPTIONS_HELP
Standaard, tenzij BESTANDen zijn opgegeven, vraagt dit script de gebruiker om
distributie/bestandsnaam, distributie/bestandsversie, en computernaam.
Bijvoorbeeld $DISTID, $DISTREL (geen LTS o.i.d. opgeven), en $HOSTNAME.
$NAME_WITH_SPACES_HELPTEXT
Het script zal in de betreffende mappen zoeken naar bestanden waarin de
Bestand: /home/karel/scripts/archive
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
Pagina 3 van 8
opgegeven gegevens voorkomen, en vragen of een bestand gearchiveerd mag
worden.
De namen van de mappen staan "hard-coded" in dit script.
HULP
return 0
}
#-Functie-------------------------------------------------------------------#
# Naam: controleer_invoer
#
# Doel: Initiële controles en/of acties.
#
# Arg.: Geen argumenten.
#
#---------------------------------------------------------------------------#
controleer_invoer() {
log "$PROGNAME:$FUNCNAME:$LINENO"
local dir=''
#-----------------------------------------------------------------------#
# Controleer aanwezigheid "hard-coded" mappen.
#
#-----------------------------------------------------------------------#
for dir in "$ARCH_FROM"
\
"$ARCH_FROM/pdfs"
\
"$ARCH_TO"
\
"$DEL_FROM_1"
\
"$DEL_FROM_2"; do
if [[ ! -d $dir ]]; then
error "$PROGNAME: map $dir bestaat niet"
exit $E_DIR_NOT_FOUND
fi
done
#-----------------------------------------------------------------------#
# Verwerk argument archiefbestand.
#
#-----------------------------------------------------------------------#
$ARG_FILE && SEARCH4=$ARG_FILE_ARGVAL
vraag_gegevens
return 0
}
#-Functie-------------------------------------------------------------------#
# Naam: vraag_gegevens
#
# Doel: Vraag om de distributienaam, distributieversie, en computernaam.
#
# Arg.: Geen argumenten.
#
#---------------------------------------------------------------------------#
vraag_gegevens() {
log "$PROGNAME:$FUNCNAME:$LINENO"
info "
Script: $PROGNAME"
info 'Archiveer...'
info " vanuit map: $ARCH_FROM"
info "
en map: $ARCH_FROM/pdfs"
info "
naar map: $ARCH_TO/<suffix>"
info "
en map: $ARCH_TO/<suffix>/pdfs"
info 'Verwijder...'
info "
uit map: $DEL_FROM_1"
info "
en map: $DEL_FROM_2"
info
$ARG_FILE && return 0
# Gegevens opgegeven met de aanroep.
read -p "Wat is de distributie/bestandsnaam? (Bijvoorbeeld $DISTID) \
[Leeg=alle]: "
SRCH4_PART1=$REPLY
Bestand: /home/karel/scripts/archive
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
Pagina 4 van 8
info
read -p "Wat is de distributie/bestandsversie? (Bijvoorbeeld $DISTREL) \
[Leeg=alle]: "
SRCH4_PART2=$REPLY
info
read -p "Wat is de computernaam? (Bijvoorbeeld $HOSTNAME) [Leeg=alle]: "
SRCH4_PART3=$REPLY
info
SEARCH4=$SRCH4_PART1*$SRCH4_PART2*$SRCH4_PART3
return 0
}
#-Functie-------------------------------------------------------------------#
# Naam: toon_invoer
#
# Doel: Toon wat het script gaat doen.
#
# Arg.: Geen argumenten.
#
#---------------------------------------------------------------------------#
toon_invoer() {
log "$PROGNAME:$FUNCNAME:$LINENO"
info "Zoek naar
info
: $SEARCH4"
return 0
}
#-Functie-------------------------------------------------------------------#
# Naam: verwerk_invoer
#
# Doel: Zoek te archiveren bestanden die de opgegeven distributienaam,
#
#
distributieversie, en computernaam bevatten, en verwerk deze.
#
# Arg.: Geen argumenten.
#
#---------------------------------------------------------------------------#
verwerk_invoer() {
log "$PROGNAME:$FUNCNAME:$LINENO"
local basename=''
local dirname=''
info
info 'Archiveren...'
NO_FILES_FOUND=true
#-----------------------------------------------------------------------#
# De checklists, scripts, installatie/instellingsbestanden, incl. pdfs. #
#-----------------------------------------------------------------------#
for search4 in $SEARCH4; do
for file in "$ARCH_FROM"/*$search4* "$ARCH_FROM"/pdfs/*$search4*; do
[[ -f "$file" ]] || continue
NO_FILES_FOUND=false
basename=$(basename "$file")
local filesuffix=${basename##*.}
# Als 'pdf' dan uit tweede reeks.
[[ $filesuffix = 'pdf' ]] && pdfs='/pdfs' || pdfs=''
dirname=$ARCH_FROM$pdfs
info --bold "$basename"
read -p 'Archiveren/Overslaan/Stoppen? (a/O/s) ' </dev/tty
case $REPLY in
Bestand: /home/karel/scripts/archive
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
Pagina 5 van 8
a*|A*)
bepaal_archiefmapnaam
"$basename"
\
"$dirname"
\
"$ARCH_FROM"
\
"$ARCH_TO"
\
ARCH_TO_COMPLETED
controleer_archiefmap
"$ARCH_TO_COMPLETED"
archiveer_bestand
"$file"
\
"$ARCH_TO_COMPLETED/$basename"
verwijder_bestand
"$basename"
success "$basename is gearchiveerd."
;;
o*|O*|'')
info 'Overslaan.'
continue
;;
s*|S*)
toon_keuze_stop_sc
;;
*)
toon_keuze_fout_sc
;;
esac
done
done
if $NO_FILES_FOUND; then
warning "Geen bestanden met '$SEARCH4' in de bestandsnaam gevonden"
warning "in map $ARCH_FROM[/pdf]."
fi
return 0
}
#-Functie-------------------------------------------------------------------#
# Naam: bepaal_archiefmapnaam
#
# Doel: Bepaal de naam van de archiefmap.
#
#
Komt neer op het vervangen van '/linux/' door '/linux-archief/',
#
#
aangevuld met een suffix afhankelijk van bestandsnaam.
#
# Arg.: Vijf verplichte argumenten:
#
#
1. bestandsnaam
string, invoer
#
#
2. mapnaam
string, invoer
#
#
3. archiveer van map
string, invoer
#
#
4. archiveer naar map
string, invoer
#
#
5. variabelenaam
string, uitvoer, krijgt als inhoud
#
#
archiefmapnaam
#
# Vb. : bepaal_archiefmapnaam
"$basename"
\
#
#
"$dirname"
\
#
#
"$ARCH_FROM"
\
#
#
"$ARCH_TO"
\
#
#
ARCH_TO_COMPLETED
#
#---------------------------------------------------------------------------#
bepaal_archiefmapnaam() {
log "$PROGNAME:$FUNCNAME:$LINENO:$@"
local basename=${1:-tmp}
local dirname=${2:-/tmp}
local arch_from=${3:-/tmp}
local arch_to=${4:-/tmp}
local _arch_to_completed_variable=${5:-arch_to_completed}
local _arch_to_completed_value=${_arch_to_completed_variable:-/tmp}
#-----------------------------------------------------------------------#
# Bepaal de 'archiveer naar map-suffix' afhankelijk van bestandsnaam.
#
#-----------------------------------------------------------------------#
case $basename in
Bestand: /home/karel/scripts/archive
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
'Checklist installatie D'*|\
'Checklist installatie L'*|\
'Checklist installatie U'*|\
'Checklist installatie X'*|\
'Veranderingen in'*)
local distro=$(echo $basename | awk
local version=$(echo $basename | awk
arch_to_suffix=$distro' '$version
;;
install-D*|\
setup-D* |\
install-L*|\
setup-L* |\
install-U*|\
setup-U* |\
install-X*|\
setup-X*)
local distro=$(echo $basename | cut
local version=$(echo $basename | cut
arch_to_suffix=$distro' '$version
;;
*)
arch_to_suffix='algemeen'
;;
esac
Pagina 6 van 8
'{print $3}')
'{print $4}')
--delimiter='-' --fields=2)
--delimiter='-' --fields=3)
local change_from=$arch_from
local change_to=$arch_to/$arch_to_suffix
_arch_to_completed_value=${dirname/$change_from/$change_to}
eval $_arch_to_completed_variable="'$_arch_to_completed_value'"
return 0
}
#-Functie-------------------------------------------------------------------#
# Naam: controleer_archiefmap
#
# Doel: Controleer of archiefmap bestaat.
#
# Arg.: Eén verplicht argument:
#
#
1. mapnaam string, invoer
#
# Vb. : controleer_archiefmap "$ARCH_TO_COMPLETED"
#
#---------------------------------------------------------------------------#
controleer_archiefmap() {
log "$PROGNAME:$FUNCNAME:$LINENO:$@"
local check_dir=${1:-/tmp}
if [[ ! -d $check_dir ]]; then
mkdir
--verbose
\
"$check_dir"
|& $LOGCMD
verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO"
'maak archiefmap aan'
${PIPESTATUS[0]}
fi
\
\
return 0
}
#-Functie-------------------------------------------------------------------#
# Naam: archiveer_bestand
#
# Doel: Archiveer het opgegeven bestand.
#
# Arg.: Twee verplichte argumenten:
#
#
1. bestandsnaam-van
string, invoer
#
#
2. bestandsnaam-naar
string, invoer
#
# Vb. : archiveer_bestand "$file" "$ARCH_TO_COMPLETED/$basename"
#
#---------------------------------------------------------------------------#
Bestand: /home/karel/scripts/archive
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
Pagina 7 van 8
archiveer_bestand() {
log "$PROGNAME:$FUNCNAME:$LINENO:$@"
local move_from=${1:-/tmp}
local move_to=${2:-/tmp}
mv
--verbose
\
"$move_from"
\
"$move_to"
|& $LOGCMD
verwerk_rc "$PROGNAME:$FUNCNAME:$LINENO"
'verplaats bestand naar archief'
${PIPESTATUS[0]}
CHANGED=true
\
\
return 0
}
#-Functie-------------------------------------------------------------------#
# Naam: verwijder_bestand
#
# Doel: Verwijder het opgegeven bestand.
#
# Arg.: Eén verplicht argument:
#
#
1. bestandsnaam string, invoer
#
# Vb. : verwijder_bestand "$basename"
#
#---------------------------------------------------------------------------#
verwijder_bestand() {
log "$PROGNAME:$FUNCNAME:$LINENO:$@"
local del_file=${1:-/tmp}
find
verwerk_rc
"$DEL_FROM_1"
\
"$DEL_FROM_2"
\
-name "$del_file"
\
-delete
|& $LOGCMD
"$PROGNAME:$FUNCNAME:$LINENO"
'verwijder bestand'
${PIPESTATUS[0]}
\
\
return 0
}
#-Functie-------------------------------------------------------------------#
# Naam: toon_afsluiten
#
# Doel: Afsluitende meldingen en/of acties.
#
# Arg.: Geen argumenten.
#
#---------------------------------------------------------------------------#
toon_afsluiten() {
log "$PROGNAME:$FUNCNAME:$LINENO"
if $CHANGED; then
info
warning "Voer nu de overige handelingen uit zoals beschreven in"
warning "Checklist archiveren."
else
warning 'Er is niets gewijzigd.'
fi
return 0
}
#############################################################################
# Hoofdlijn
#
#############################################################################
# init_script
{
controleer_invoer_sc
"$@"
controleer_gebruiker_sc $SCRIPT_NEEDS_SUDO
controleer_invoer
Bestand: /home/karel/scripts/archive
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
toon_invoer
}
# verwerk
{
toon_gestart_sc
verwerk_invoer
toon_gestopt_sc
}
# afsl_script
{
toon_afsluiten
toon_afsluiten_sc
exit 0
}
# Einde script.
Pagina 8 van 8