ubuntuusers.de

zip Datei automatisch entpacken und verschieben

Status: Ungelöst | Ubuntu-Version: Ubuntu 24.04 (Noble Numbat)
Antworten |

DirkGelpke

(Themenstarter)

Anmeldungsdatum:
17. Juli 2024

Beiträge: 10

Ich habe mich jetzt auch mal an den Cronjob gewagt, da ich das ganze gerne automatisiert hätte. Doch irgendwie ist da wohl noch ein Fehler ? gestartet hab ich mit crontap -e

1
2
3
4
#Startet das Scripts alle 8 Stunden jeden Tag
0 */8 * * * /media/administrator/28a00382-4261-407c-983d-f0e37c8001bf/SAB-Data/scripts/unpackzip.sh # JOB_ID_False 
#Startet das Scripts alle 12 Stunden jeden Tag
0 */12 * * * /media/administrator/28a00382-4261-407c-983d-f0e37c8001bf/SAB-Data/scripts/synctask.ffs_batch

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4450

Wohnort: Göttingen

Bitte so etwas nicht als Bild posten, sondern als Codeblock, siehe Forum/Syntax

DirkGelpke

(Themenstarter)

Anmeldungsdatum:
17. Juli 2024

Beiträge: 10

Wie würde sich der Code ändern, wenn ich nur einen Ordner habe mit mehreren Unterordnern nach .zip durchsuchen will und im gleichen Ordner entpacken. Reicht es wenn ich den BackupDir auskommentiere?

DirkGelpke

(Themenstarter)

Anmeldungsdatum:
17. Juli 2024

Beiträge: 10

Ich will einen Ordner in dem mehrere Ordner sind mit Zip-Files im jeweiligen selben Ordner entpacken. Dabei habe ich vom oberen script den Code mit dem Backupverzeichnis und das verschieben der zip Datei entfernt. Geht das so einfach?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Pfade zu den Verzeichnissen mit den ZIP-Dateien
NETWORK_MOUNT_PATH="/media/administrator/28a00382-4261-407c-983d-f0e37c8001bf/SAB-Data"  
# Durchlaufe alle Verzeichnisse im Ordner
for dir in "$NETWORK_MOUNT_PATH"/*; do  
    if [ -d "$dir" ]; then  
        # Durchlaufe alle ZIP-Dateien im aktuellen Verzeichnis
        for zipfile in "$dir"/*.zip; do  
            if [ -f "$zipfile" ]; then  
                # Entpacke die ZIP-Datei im selben Verzeichnis
                unzip -o "$zipfile" -d "$dir"  
            fi
        done
 

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17597

Wohnort: Berlin

a) Für die Funktionsweise macht es keinen Unterschied, aber aus ergonomischen Gründen (Lesbarkeit, Übersichtlichkeit) benutzt man in Shellscripten nur ausnahmsweise ein Semikolon und stattdessen Zeilenumbrüche. Semikolons sind interaktiv, für Wegwerfcode, geeignet.

b) Jedes if muss mit fi geschlossen werden, jedes do mit done.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19

# Pfade zu den Verzeichnissen mit den ZIP-Dateien
NETWORK_MOUNT_PATH=/media/administrator/28a00382-4261-407c-983d-f0e37c8001bf/SAB-Data
# Durchlaufe alle Verzeichnisse im Ordner
for dir in "$NETWORK_MOUNT_PATH/*"
do  
    if [ -d "$dir" ]
    then  
        # Durchlaufe alle ZIP-Dateien im aktuellen Verzeichnis
        for zipfile in "$dir/*.zip"
        do  
            if [ -f "$zipfile" ]
            then  
                # Entpacke die ZIP-Datei im selben Verzeichnis
                unzip -o "$zipfile" -d "$dir"  
            fi
        done
    fi
done

Mehr habe ich hier nicht beachtet, außer einem:

/media/administrator/28a00382-4261-407c-983d-f0e37c8001bf/SAB-Data enthält kein Zeichen, welches der Maskierung bedarf. Also habe ich die Anführungsstriche entfernt.

Dagegen kann der Stern in "$NETWORK_MOUNT_PATH/*" der Maskierung bedürfen, daher habe ich da die Maskierung bis zu dem Punkt, wo sie relevant werden könnte, erweitert. Analog in "$dir/*.zip".

Weitere Prüfungen habe ich nicht durchgeführt. Ein Tool, um allfällige Fehler zu finden, ist shellcheck.

Das findet keine semantischen Fehler, wenn das Programm nicht macht, was Du willst, aber was Du gesagt hast (geschrieben) und es neigt zum Overreporting, also bemängelt auch nicht selten Sachen, die nicht falsch sein können. Die Vorschläge, die es macht, schaden dann aber auch - nach meiner Erfahrung - nicht (außer beim Lernerfolg, insbes.: Quoting verstehen).

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13160

DirkGelpke schrieb:

Wie würde sich der Code ändern, wenn ich nur einen Ordner habe mit mehreren Unterordnern nach .zip durchsuchen will und im gleichen Ordner entpacken. Reicht es wenn ich den BackupDir auskommentiere?

Da müsste so etwas gehen:

1
find "$NETWORK_MOUNT_PATH" -type f -iname '*.zip' -execdir unzip {} \;

Das findet alle Zips unter einem Ordner und packt sie in dem Verzeichnis aus, in dem sie liegen.

Antworten |