ubuntuusers.de

Bash Skript Sicherung

Status: Ungelöst | Ubuntu-Version: Ubuntu 18.10 (Cosmic Cuttlefish)
Antworten |

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:

  1. das Skript wird mit einem Parameter „Pfad zum Sicherungsordner“ gestartet

  2. überprüfen Sie ob der Parameter angegeben worden ist

  3. überprüfen Sie ob das Sicherungsverzeichnis existiert, andernfalls muss es erstellt werden

  4. kopieren Sie die Daten in das angegebene Verzeichnis

  5. der Parameter -help muss die Hilfe für die Verwendung des Skriptes anzeigen

  6. erstellen Sie eine Log-Datei von den kopierten Dateien

Danke und LG

Bearbeitet von rklm:

Aufzählung. Bitte beachte Forum/Syntax!

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

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 Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

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 Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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 Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

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

Avatar von 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:

  1. das Skript wird mit einem Parameter „Pfad zum Sicherungsordner“ gestartet

  2. überprüfen Sie ob der Parameter angegeben worden ist

  3. überprüfen Sie ob das Sicherungsverzeichnis existiert, andernfalls muss es erstellt werden

  4. kopieren Sie die Daten in das angegebene Verzeichnis

  5. der Parameter -help muss die Hilfe für die Verwendung des Skriptes anzeigen

  6. erstellen Sie eine Log-Datei von den kopierten Dateien

Danke und LG

Bearbeitet von rklm:

Aufzählung. Bitte beachte Forum/Syntax!

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 Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

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.

Antworten |