Lippei
Anmeldungsdatum: 29. Juni 2018
Beiträge: Zähle...
|
Kann mir jmd einen Skript dafür bitte schreiben ? Script für eine einfache Sicherung Erstellen Sie ein Skript welches alle Dateien aus dem Verzeichnis /bin welche mit
dem Buchstaben c beginnen in ein Sicherungsverzeichnis kopiert werden.
Generieren Sie auch eine Log-Datei damit die Sicherung nachvollzogen werden
kann.
Anforderung: das Skript wird mit einem Parameter „Pfad zum Sicherungsordner“ gestartet überprüfen Sie ob der Parameter angegeben worden ist überprüfen Sie ob das Sicherungsverzeichnis existiert, andernfalls muss es erstellt werden kopieren Sie die Daten in das angegebene Verzeichnis der Parameter -help muss die Hilfe für die Verwendung des Skriptes anzeigen erstellen Sie eine Log-Datei von den kopierten Dateien
Danke und LG
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4673
Wohnort: Berlin
|
@Lippei: Fragst Du gerade ernsthaft ob Dir jemand Deine Hausaufgaben für Dich löst? 😀
|
Lippei
(Themenstarter)
Anmeldungsdatum: 29. Juni 2018
Beiträge: 7
|
Sie haben mich durchschaut ! ;D
Ich sitze gerade in der Schule und meine Klassenkameraden und ich verzweifeln and dieser Übung, können Sie uns bitte helfen ? LG
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11248
Wohnort: München
|
Technisch gesehen ist es ein Bash-Skript... 😈
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | #!/bin/bash
python3 <( cat << 'EOF'
import pathlib
import shutil
import sys
if len(sys.argv) < 3 or '-help' in sys.argv:
sys.exit(f'Usage:\n{sys.argv[1]} PATH_TO_BACKUP_FOLDER')
target = pathlib.Path(sys.argv[2])
files = (p for p in pathlib.Path('/bin/').glob('c*') if p.is_file())
try:
target.mkdir(parents=True, exist_ok=True)
except IOError as e:
sys.exit(f"could not create {target}: {e}")
with open('log.txt', 'w') as logfile:
for f in files:
try:
shutil.copy2(f, target.joinpath(f.name))
except IOError as e:
print(f"could not copy {f.name} to {target}: {e}", file=sys.stderr)
else:
print(f"successfully copied {f.name} to {target}", file=logfile)
EOF) "$0" "$@"
|
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4673
Wohnort: Berlin
|
Technisch gesehen ist das hier auch ein Bash-Skript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #!/bin/sh
# \
exec tclsh "$0" "$@"
if {$argc < 1 || [lsearch $argv "-help"] ne -1} {
puts [list "Usage:" $argv0 "-help|backup_path"]
} else {
set backup_path [lindex $argv 0]
if {[file exists $backup_path] eq 0} {file mkdir $backup_path}
set log [open copy.log w]
foreach name [glob -nocomplain /bin/c*] {
puts $log [
list copying $name to [file join $backup_path [file tail $name]]
]
file copy -force -- $name $backup_path
}
close $log
}
|
|
Lippei
(Themenstarter)
Anmeldungsdatum: 29. Juni 2018
Beiträge: 7
|
Danke für eure Hilfe aber es funktioniert nicht. Marc bei der dritten Zeile meckert er schon.
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4673
Wohnort: Berlin
|
@Lippei: Bei mir funktioniert's, da meckert keiner. Wer meckert denn bei Dir? Der Lehrer/Dozent? Die Shell? Was wird denn gemeckert?
|
Lippei
(Themenstarter)
Anmeldungsdatum: 29. Juni 2018
Beiträge: 7
|
Zeile 3: exec: tclsh: Nicht gefunden
|
Lippei
(Themenstarter)
Anmeldungsdatum: 29. Juni 2018
Beiträge: 7
|
ok das Problem hab ich selber jetzt lösen können. mit sudo apt install tcl.
jetzt sagt er wenn ich es starten will | extra characters after close-quote
in expression "...1 || [lsearch "argv "-help] ne -1"
(parsing expression "$argc < 1 || [lsearch ...")
invoked from within
"if {"$argc < 1 || [lsearch "§argv "-help"] ne-1} {
puts [list "Usage:" §argv0 -help|/home/bacher"]
}else{
set /home/bacher [lindex $argv 0]
if{[.."
(file"Sicherungnew.sh" line 5)
|
|
Akedia
Anmeldungsdatum: 3. Januar 2018
Beiträge: 92
|
... einfach mal die bash bemüht: #!/bin/bash
((
S_PATH=$1
# prüfen ob Parameter gesetzt
if [ -z "${S_PATH}" -o "${S_PATH}" == "-help" ]; then
echo "Usage: `basename $0` <path>"
exit 0
fi
# prüfen ob Pfad existert, ggfs. anlegen
if [ ! -d "$S_PATH" ]; then
echo "Directory ${S_PATH} DOES NOT exist"
mkdir -p $1
fi
echo "Kopiere Dateien nach ${S_PATH}"
cp -pv /bin/c* ${S_PATH}/
) 2>&1) | tee -a "log.txt"
Das in eine Datei meinScript.sh einfügen und mit bash meinScript.sh sicherung
aufrufen ... kann man sicher auch noch verbessern ☺
|
Lippei
(Themenstarter)
Anmeldungsdatum: 29. Juni 2018
Beiträge: 7
|
Danke Akedia dein Skript hat funktioniert:D. Auch an die anderen ein Dankeschön für eure hilfe !
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4673
Wohnort: Berlin
|
@Lippei: Dann musst Du irgendeinen Fehler beim abschreiben oder verändern gemacht haben, denn dass das nicht mehr das Originalskript ist, kann man an den Quelltextfragmenten in der Fehlermeldung ja erkennen.
|
Lippei
(Themenstarter)
Anmeldungsdatum: 29. Juni 2018
Beiträge: 7
|
Ok ich probier nochmal. Danke!
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17604
Wohnort: Berlin
|
Lippei schrieb: Kann mir jmd einen Skript dafür bitte schreiben ? Script für eine einfache Sicherung Erstellen Sie ein Skript welches alle Dateien aus dem Verzeichnis /bin welche mit
dem Buchstaben c beginnen in ein Sicherungsverzeichnis kopiert werden.
Generieren Sie auch eine Log-Datei damit die Sicherung nachvollzogen werden
kann.
Anforderung: das Skript wird mit einem Parameter „Pfad zum Sicherungsordner“ gestartet überprüfen Sie ob der Parameter angegeben worden ist überprüfen Sie ob das Sicherungsverzeichnis existiert, andernfalls muss es erstellt werden kopieren Sie die Daten in das angegebene Verzeichnis der Parameter -help muss die Hilfe für die Verwendung des Skriptes anzeigen erstellen Sie eine Log-Datei von den kopierten Dateien
Danke und LG
Wenn Du nichts davon kannst hol Dir die verdiente 6 ab. Das wird ja im Unterricht behandelt worden sein. Wenn Dich das Fach nicht interessiert musst Du versuchen die schlechte Leistung durch ein anderes Fach auszugleichen. Wenn Du große Teile davon selbst lösen kannst, und an einer Sache hängst und schreibst, was konkret Schwierigkeiten macht, was Du versucht hast und inwiefern das nicht geklappt hat, wird man Dir sicher helfen. Wir haben schon genug Flughafenentrauchungsanlagen die nicht funktionieren. Wir haben kein Interesse daran, Blender und Pfuscher zu befördern.
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4673
Wohnort: Berlin
|
Verbesserungsvorschläge für die Lösung von Akedia: Man kann sich eine von den Subshells sparen. Bash's [[ statt [ für Tests. $(…) statt Backticks.
Überall $S_PATH verwenden und nicht an einer Stelle dann doch wieder $1 . Den Pfad überall korrekt escapen und aufpassen das der Benutzer auch einen Pfad eingeben kann der mit einem - anfängt. Ein besserer Name als $S_PATH wo ich immer noch am rätseln bin wofür das S steht.
|