Ich bastel grad an einem Bash-Script, welches irgendwann mal völlig selbsttätig per Cron laufen soll.
Dieses Script soll hinter sich aufräumen und muss dafür ein paar Verzeichnisse löschen. Naja, is Linux, rm -rf und gib ihm, is ja nich so schwer. ... Da die zu löschenden Verzeichnisse sich aber anhand von Variablen fest machen und ich da letzten Endes nicht alles von Hand absegnen kann, habe ich dabei ein eher ungutes Gefühl ... einfach mal rm -rf kann halt auch mal gehörig in die Hose gehen!
Ich muss also irgendwie sicher stellen, dass da nix falsches gelöscht wird. Mein erster Ansatz ist sowas hier:
Die Funktion sanitycheck soll also einmal überprüfen, ob da gegebenenfalls was gefährliches in dem übergebenen Pfad steckt (wobei die Prüfung auf / relativ witzlos ist, weil das Script dort keine Schreibrechte hat, trotzdem!)
Die series_list wird von mir wirklich so im Script gesetzt, ich kann da also auch durchaus nochmal drüber gucken. Es ist nicht so, dass das Script da extern angegebene Werte an rm weiter gibt. Trotzdem möchte ich nicht einfach blind irgendwas löschen ...
So, und jetzt sagt mir, wie bescheuert ich bin, dass ich da komplett falsch ran gehe und dass das alles ganz anders und viel einfacher geht. :gratz
Gruß
Look
Dieses Script soll hinter sich aufräumen und muss dafür ein paar Verzeichnisse löschen. Naja, is Linux, rm -rf und gib ihm, is ja nich so schwer. ... Da die zu löschenden Verzeichnisse sich aber anhand von Variablen fest machen und ich da letzten Endes nicht alles von Hand absegnen kann, habe ich dabei ein eher ungutes Gefühl ... einfach mal rm -rf kann halt auch mal gehörig in die Hose gehen!
Ich muss also irgendwie sicher stellen, dass da nix falsches gelöscht wird. Mein erster Ansatz ist sowas hier:
Code:
#!/bin/bash
#some variables ...
master_path="/important/path"
isolated_path="/some/other/path"
series_list=("Paul" "Peter" "Hans" "Alice" "Bob")
#some functions ...
# do a sanitycheck on the path, that is passed to rm -rf.
function sanitycheck {
if [ $isolated_path == "/" ]; then
echo "Found dangerous path $1. Will not be removed from isolated path." 1>&2
return 1
elif [ $isolated_path == $master_path ]; then
echo "Isolated path equals master path. Will not remove this." 1>&2
return 1
fi
echo `/usr/bin/realpath $1` | egrep ^$isolated_path > /dev/null && return 0
echo "Found dangerous path $1. Will not be removed from isolated path." 1>&2
return 1
}
#do stuff here
# clean isolated dir
# !!!! THIS IS POTENTIALLY VERY DANGEROUS !!!!
# Needs a lot of rethinking, sanity-check from other people and testing as well.
for series in $series_list; do
if [ sanitycheck $isolated/$series ]; then
/bin/rm -rf $isolated_path/$series
fi
done
# do more stuff here
Die series_list wird von mir wirklich so im Script gesetzt, ich kann da also auch durchaus nochmal drüber gucken. Es ist nicht so, dass das Script da extern angegebene Werte an rm weiter gibt. Trotzdem möchte ich nicht einfach blind irgendwas löschen ...
So, und jetzt sagt mir, wie bescheuert ich bin, dass ich da komplett falsch ran gehe und dass das alles ganz anders und viel einfacher geht. :gratz
Gruß
Look