ubuntuusers.de

Dateien per script unzippen

Status: Gelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

suwo

Anmeldungsdatum:
25. Februar 2009

Beiträge: 502

Hallo zusammen.

Ich mache folgendes: Ich lade mir mehrere Dateien aus der Cloud als eine zip-Datei auf meinen PC. Anschließend entpacke ich diese und kopiere die Dateien mittels meines laienhaften Scriptes (als zusätzliches Backup) auf eine externe HD. Mir ist es nicht gelungen, dass Script so zu erweitern, dass die zip-Datei (wird immer in denselben Ordner geladen) dort enpackt, die zip-Datei anschließend gelöscht und nur die entpackten Dateien rüberkopiert werden. Hat jemand Tipps oder eine gute Hilfestellung, wie ich mein Script erweitern muss?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
#Überprüfung ob HD vorhanden ist

if test -e /media/user/backup/backup.txt
then
#Meldung ausgeben
notify-send "Dateien werden gesichert!" 

# Sicherung mittels rsync 
rsync -a  /home/user/backup  /media/user/backup/ 

notify-send "Alle Dateien kopiert."

umount /media/user/backup

notify-send "Laufwerk wurde ausgehangen."

else
notify-send  "Achtung die HD ist nicht angeschlossen!"
fi

#

Danke für die Hilfe und schönen Sonntag

Suwo

Bearbeitet von rklm:

Syntaxhighlighting

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 812

Wohnort: Hamburg

ist nicht getestet

#!/bin/bash

# Konfiguration - Pfade anpassen
ZIP_VERZEICHNIS="/pfad/zum/zip/verzeichnis"
EXTERNE_FESTPLATTE="/pfad/zur/externen/festplatte"
TEMP_VERZEICHNIS="/tmp/entpackte_zips_$$"  # $$ fügt die Prozess-ID hinzu für Eindeutigkeit

# Farben für Ausgabe
GRUEN='\033[0;32m'
ROT='\033[0;31m'
GELB='\033[0;33m'
NORMAL='\033[0m'

# Startzeit erfassen
STARTZEIT=$(date +%s)

# Prüfen ob externe Festplatte gemountet ist
if ! mountpoint -q "$EXTERNE_FESTPLATTE"; then
    echo -e "${ROT}Fehler: Externe Festplatte unter $EXTERNE_FESTPLATTE ist nicht gemountet!${NORMAL}"
    exit 1
fi

# Prüfen ob ZIP-Verzeichnis existiert
if [ ! -d "$ZIP_VERZEICHNIS" ]; then
    echo -e "${ROT}Fehler: Das Verzeichnis $ZIP_VERZEICHNIS existiert nicht!${NORMAL}"
    exit 1
fi

# Temporäres Verzeichnis erstellen
mkdir -p "$TEMP_VERZEICHNIS"
echo "Temporäres Verzeichnis erstellt: $TEMP_VERZEICHNIS"

# Prüfen ob ZIP-Dateien vorhanden sind
ZIP_ANZAHL=$(find "$ZIP_VERZEICHNIS" -maxdepth 1 -name "*.zip" | wc -l)
if [ "$ZIP_ANZAHL" -eq 0 ]; then
    echo -e "${GELB}Keine ZIP-Dateien im Verzeichnis $ZIP_VERZEICHNIS gefunden.${NORMAL}"
    rm -rf "$TEMP_VERZEICHNIS"
    exit 1
fi

# ZIP-Dateien entpacken
echo "Entpacke ZIP-Dateien..."
ERFOLG=true
for ZIP_DATEI in "$ZIP_VERZEICHNIS"/*.zip; do
    if [ -f "$ZIP_DATEI" ]; then
        echo "Entpacke $(basename "$ZIP_DATEI")..."
        if unzip -q "$ZIP_DATEI" -d "$TEMP_VERZEICHNIS"; then
            echo "Entpacken erfolgreich: $(basename "$ZIP_DATEI")"
        else
            echo -e "${ROT}Fehler beim Entpacken von $(basename "$ZIP_DATEI")${NORMAL}"
            ERFOLG=false
        fi
    fi
done

# Dateien auf externe Festplatte kopieren
echo "Kopiere Dateien auf externe Festplatte $EXTERNE_FESTPLATTE..."
if cp -r "$TEMP_VERZEICHNIS"/* "$EXTERNE_FESTPLATTE"/; then
    echo "Kopieren erfolgreich"
else
    echo -e "${ROT}Fehler beim Kopieren der Dateien!${NORMAL}"
    ERFOLG=false
fi

# Temporäres Verzeichnis löschen
echo "Lösche temporäres Verzeichnis..."
rm -rf "$TEMP_VERZEICHNIS"

# Wenn alles erfolgreich war, lösche die ZIP-Dateien
if [ "$ERFOLG" = true ]; then
    echo "Lösche verarbeitete ZIP-Dateien..."
    for ZIP_DATEI in "$ZIP_VERZEICHNIS"/*.zip; do
        if [ -f "$ZIP_DATEI" ]; then
            echo "Lösche $(basename "$ZIP_DATEI")..."
            rm "$ZIP_DATEI"
        fi
    done
else
    echo -e "${GELB}Es sind Fehler aufgetreten. ZIP-Dateien werden nicht gelöscht.${NORMAL}"
fi

# Endzeit und Laufzeit berechnen
ENDZEIT=$(date +%s)
LAUFZEIT=$((ENDZEIT - STARTZEIT))

# Laufzeit formatieren
if [ $LAUFZEIT -lt 60 ]; then
    LAUFZEIT_STR="${LAUFZEIT} Sekunden"
elif [ $LAUFZEIT -lt 3600 ]; then
    MINUTEN=$((LAUFZEIT / 60))
    SEKUNDEN=$((LAUFZEIT % 60))
    LAUFZEIT_STR="${MINUTEN} Minuten und ${SEKUNDEN} Sekunden"
else
    STUNDEN=$((LAUFZEIT / 3600))
    MINUTEN=$(((LAUFZEIT % 3600) / 60))
    LAUFZEIT_STR="${STUNDEN} Stunden und ${MINUTEN} Minuten"
fi

# Erfolgsmeldung ausgeben
if [ "$ERFOLG" = true ]; then
    echo -e "${GRUEN}Aufgabe erfolgreich abgeschlossen! Laufzeit: $LAUFZEIT_STR${NORMAL}"
else
    echo -e "${GELB}Aufgabe mit Fehlern abgeschlossen. Laufzeit: $LAUFZEIT_STR${NORMAL}"
fi

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4687

Wohnort: Berlin

@suwo Was genau funktioniert denn nicht? Fehlermeldung(en)? Was passiert und wo weicht das von dem ab was Du erwartest?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13211

Und warum speicherst Du nicht einfach die Zip-Archive als Backup? Da sparst Du doch vielleicht sogar noch Platz auf dem Zielsystem.

suwo

(Themenstarter)

Anmeldungsdatum:
25. Februar 2009

Beiträge: 502

Hallo.

Danke für die Hilfe. @Marc-BlackJack_Rint Unzippen konnte ich im Terminal halbwegs gut. Ich war/bin nur nicht in der Lage das vernünftig in ein Script zu packen. @rklm Ich speicher das für meinen Sohn. Und der will sich die einzelnen Dateien auf der HD so anschauen und nicht in ZIP Archiven rumsuchen. Mir wäre es grundsätzlich egal. Jetzt zum Script. Das sieht ja echt aufwendig aus. Ich habe die Pfade angepasst. Hier der erste Teil:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash

# Konfiguration - Pfade anpassen
ZIP_VERZEICHNIS= ~/backup
EXTERNE_FESTPLATTE= /media/wolle/piet
TEMP_VERZEICHNIS="/tmp/entpackte_zips_$$"  # $$ fügt die Prozess-ID hinzu für Eindeutigkeit

# Farben für Ausgabe
GRUEN='\033[0;32m'
ROT='\033[0;31m'
GELB='\033[0;33m'
NORMAL='\033[0m'

Das Script läuft erstmal unter test.sh Wenn ich esstarte kommt folgendes:

1
2
3
4
5
Code
/test.sh
./test.sh: Zeile 4: /home/wolle/backup: Ist ein Verzeichnis
./test.sh: Zeile 5: /media/wolle/piet: Ist ein Verzeichnis
Fehler: Externe Festplatte unter  ist nicht gemountet!

Die HD ist gemountet.

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 812

Wohnort: Hamburg

Ich habe es bei mir mal getestet, bei mir funktioniert die Abfrage (habe es mal als Einzeiler getestet)

root@ubuntu-desktop:~# if ! mountpoint -q "$EXTERNE_FESTPLATTE"; then echo -e "${ROT}Fehler: Externe Festplatte unter $EXTERNE_FESTPLATTE ist nicht gemountet! ${NORMAL}"; fi
Fehler: Externe Festplatte unter /mnt/ReaR/ ist nicht gemountet!
root@ubuntu-desktop:~# /etc/rear/scripte/pre_mount_smb.sh
Versuche Mount mit direkten Anmeldedaten...
SMB-Share erfolgreich gemountet.
root@ubuntu-desktop:~# if ! mountpoint -q "$EXTERNE_FESTPLATTE"; then echo -e "${ROT}Fehler: Externe Festplatte unter $EXTERNE_FESTPLATTE ist nicht gemountet! ${NORMAL}"; fi
root@ubuntu-desktop:~#

Bitte erwarte nicht das ich dir beim scripten weiter Helfe, ich war schon nett das ich dir das soweit vorbereitet habe, das anpassen an deine Umgebung musst du schon hinbekommen

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

micneu schrieb:

Bitte erwarte nicht das ich dir beim scripten weiter Helfe, ich war schon nett das ich dir das soweit vorbereitet habe, das anpassen an deine Umgebung musst du schon hinbekommen

Der von dir gezeigte Code sieht für mich stark nach einer KI-Ausgabe aus, weil da auch sehr viel drin steckt, was überhaupt nicht gefragt war. Dann wäre das "Vorbereiten" wohl nicht das Coden, sondern das Verfassen des Prompts für die KI einschließlich der Nachjustierung. Ist ja auch kein schlechter Ansatz. Dumm nur, wenn nun weder Du noch der TE den Code wirklich durchblicken. 😀

@suwo: Bei Shell-Skripten muss man sehr auf die richtige Formatierung achten. Schreibe mal deine Pfadangaben, die du eingesetzt hast, in Anführungsstrichen und baue KEIN Leerzeichen nach dem Gleichheitszeichen ein. Das vom Skript erwartete Muster war ja eigentlich schon vorgegeben. ☺

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 812

Wohnort: Hamburg

Ich habe von meinen vorhandenen scripten mir einiges zusammen gesucht (das mit den Farben, Zeitmessung verwende ich meist in meinen Scripten) und ich verstehe den Code.

suwo

(Themenstarter)

Anmeldungsdatum:
25. Februar 2009

Beiträge: 502

Hallo zusammen.

@micneu Vielen Dank für die Mühe. Ich habe selbstverständlich keine Komplettlösung erwartet. Wenn Du dein Script aber mit meinem vergleichst, siehst Du sicherlich die eklatanten Unterschiede in meinem und Deinem Wissen, was das Scripten angeht. 😉 . Das heißt, sobald eine Fehlermeldung auftaucht, stehe ich auf dem Schlauch und muss auf weitere Tipps hoffen. Auf jeden Fall funzt es jetzt so, wie ich mir das vorgestellt habe. Nochmals Danke dafür.

@snafu1 Dir auch danke für die Hinweise. Es lag tatsächlich an der Formatierung. Super dieses Forum. Mir konnte bisher jedesmal geholfen werden.

Allen eine schöne Woche.

Gruß Suwo

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 812

Wohnort: Hamburg

Nicht vergessen als gelöst markieren

Antworten |