jodelknut
Goto Top

Linux Verzeichnisse durchsuchen und Inhalt zippen

Hallo,

ich habe eine Ubuntu Verzeichnis Struktur zum Testen übernommen, hier gibt es ein Verzeichnis (DATEN) mit über 100K Unterverzeichnissen, die teilweise mehrere Unterverzeichnisse mit Dateien (eventuell auch namensgleiche) enthalten können.

Mein Plan ist ein Skript drüberlaufen lassen, dass den Inhalt der Unterverzeichnisse zippt und auf das darüberliegende Verzeichnis kopiert. Wenn das funktioniert hat, dann sollen die Dateien und Unterverzeichnisse gelöscht werden, so dass alle Dateien in den Unterverzeichnissen des Ordners DATEN liegen.

Gibt es viellicht schon fertige Skripte oder andere Tools ggfs. mit Logging Funktion oder so hierfür?

Vielen Dank

Content-ID: 13663118382

Url: https://administrator.de/contentid/13663118382

Ausgedruckt am: 22.11.2024 um 02:11 Uhr

ITwissen
ITwissen 31.01.2024 um 12:03:43 Uhr
Goto Top
Siehe "man zip":

 -m
       --move
              Move the specified files into the zip archive; actually, this deletes the target  directories/files  after  making
              the specified zip archive. If a directory becomes empty after removal of the files, the directory is also removed.
              No deletions are done until zip has created the archive without error.  This is useful for conserving disk  space,
              but  is potentially dangerous so it is recommended to use it in combination with -T to test the archive before re‐
              moving all input files.
Jodelknut
Jodelknut 31.01.2024 um 12:13:10 Uhr
Goto Top
Ok, das werde ich mal ausprobieren, und wie kann ich am besten durch die ganzen Verzeichnisse "wandern"?
Lochkartenstanzer
Lochkartenstanzer 31.01.2024 aktualisiert um 12:57:34 Uhr
Goto Top
Moin,

find <basisverzeichnis> -depth -type d -exec zip -mr {}.zip {} ; rmdir -v {} \; 

so als Grundidee, jeweils bei den "untersten" verzeichnissen anzufangen und die Dateien da drin jeweils eine Ebene höher zu zippen und dann das verzeichnis zu löschen. Gibt natürlich sehr viele verschahtelete zips und endet dann in einem riesigen ZIPfile.

lks
ITwissen
ITwissen 31.01.2024 um 14:49:40 Uhr
Goto Top
Quote from @Jodelknut:

Ok, das werde ich mal ausprobieren, und wie kann ich am besten durch die ganzen Verzeichnisse "wandern"?

Da musst du nochmal genau erklären, wie die Struktur aussieht. Das hab ich so genau verstanden, dass ich das genau hinschreiben kann.

ZIP ist auch eher ein Windows Tool.
Wenn du die erzeigten ZIPs unter Windows benutzen willst, dann Okay.
Wenn die aber bei Linux bleiben sollen, dann vielleicht eher sowas wie "tar" nehmen.
Jodelknut
Jodelknut 31.01.2024 um 15:07:11 Uhr
Goto Top
Ich habe mal eine Struktur aufgebaut und ein Bild gemacht:
Hauptebene: DATEN
darunter
123456 mit drei Unterzeichnissen
123457 mit einem Unterzeichnis
123458 ohne Unterzeichnisse

Ziel soll sein, dass die Dateien aus den Unterzeichnissen U1,U2 und U3 im Verzeichnis 123456 sind
und aus dem Unterzeichnis UV22 im Verzeichnis 123457

Ich hoffe es ist jetzt klarer

daten
colinardo
colinardo 31.01.2024, aktualisiert am 01.02.2024 um 11:46:10 Uhr
Goto Top
Servus @Jodelknut,
z.B. so
#!/bin/bash
find /ABBSOLUTE/PATH/TO/DATEN -maxdepth 2 -mindepth 2 -type d | while read folder ;do 
    cd "$folder"  
    zip -rm "$(dirname $folder)/$(basename $folder).zip" . -i "*"  
    [[ $? -eq 0 ]] && rm -r "$folder"  
done
oder so wenn absolute Pfade in der Zip gewünscht sind:
#!/bin/bash
find /ABBSOLUTE/PATH/TO/DATEN -maxdepth 2 -mindepth 2 -type d | while read folder ;do zip -rm "$(dirname $folder)/$(basename $folder).zip" "$folder" ;done  
Grüße Uwe
Jodelknut
Jodelknut 31.01.2024 um 16:23:57 Uhr
Goto Top
Probiere ich aus, vielen Dank schon mal