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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 13663118382
Url: https://administrator.de/contentid/13663118382
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
7 Kommentare
Neuester Kommentar
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.
Moin,
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
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
Quote from @Jodelknut:
Ok, das werde ich mal ausprobieren, und wie kann ich am besten durch die ganzen Verzeichnisse "wandern"?
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.
Servus @Jodelknut,
z.B. so
oder so wenn absolute Pfade in der Zip gewünscht sind:
Grüße Uwe
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
#!/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