Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Ich möchte verschiedene Unterverzeichnisse mitr 7z packen. Jedes Unterverzeichnis in eine eigene Datei.
C:\Testdaten\A enthält keine weiteren Ordner
C:\Testdaten\B enthält weitere Unterordner
Hab gerade keinen Computer da, aber sollte doch einfach mit Rechtsklick auf den Ordner 7-Zip>Archiv erstellen oder so gehen, da kannst du dann noch zwischen ZIP und 7Z auswählen. Falls du Windows 11 nutzt, musst du noch ganz unten im Rechtsklick Menü die anderen Optionen einblenden.
Ich möchte nicht jeden Ordner einzeln auswählen, sondern alle Verzeichnisse im Unterordner "Testdaten" sollen gepackt werden. Im Ordenr "Testadten" befinden sich ca. 500 Unterordner.
Das von ATist nbeschriebene Vorgehen passt genau für einen Ordner.
Markiere ich mehrer Orndner wird als Dateiname "Testdaten" vorgewählt. Genau das möchte ich aber nicht.
Ist doch ganz einfach.
Du öffnest deinen Explorer, wählst deinen Ordner, hier D:\Dokumente gehst zu 7zip > Add to Archive, da packst du alles.
Rechts siehst du die in 7zip entpackte Datei mit allen Ordnern.
hab grad mal nen Script geschrieben, als Beispiel. (da ich Linuxer bin ist das natürlich nen shell script, explizit für Bash). Ich habs getestet, es sucht nach den Verzeichnisnamen und macht aus jedem eine einzelne Zip Datei mit dem Inhalt der Ordner und das 7z mit dem Namen der Ordner:
Bash:
#!/bin/bash
for i in $(ls --format=single-column -F | grep -i \/ | sed s/\\//""/)
do
echo "gerade bearbeitet wird:"$i":"
7z a "$i.7z" $i
done
Edit:
Es sucht in dem Verzeichnis wo es liegt/ausgeführt wird nach den Ordnern erster Ebene. und nur Ordner.
Die 7z Dateien landen im selben Verzeichnispfadwo es ausgeführt wird. ganz simpel gestrickt das Script.
Es ist keine parallelisierung eingebaut, was aber super einfach wäre.ein job per Verzeichnis starten lassen. (einfach ein & am ende der 7z Befehlszeile)
Edit:
am längsten hat natürlich gedauert nach den passenden abfragen und Filtern zu suchen und das zu testen, soo lang wars aber auch nicht
also optional parallel:
Bash:
#!/bin/bash
for i in $(ls --format=single-column -F | grep -i \/ | sed s/\\//""/)
do
echo "gerade bearbeitet wird:"$i":"
7z a "$i.7z" $i &
done
Edit:
Zu bedenken ist, das je nach Rechner und Hardware das parallele starten sehr von nachteil oder Vorteil sein kann. HDD kommen garnicht gut mit dem parallelen zugriff klar... SSd werden Teils deutlich schneller umso mehr parallel läuft.
@Joe58: Danke das ist der richtige Weg. Was noch fehlt ist die Grö0e der Wiederherstellungsinformationen (10% wäre gut) und die Größe der Teildateien (z.B. 700 MB).
@Alexander2: Leider funktioniert das Script nicht unter Windows.
Sofern es nicht unbedingt 7zip sein muss:
WinRAR bietet die Funktion, jede ausgewaehlte Datei bzw. jeder Ordner in ein eigenes Archiv zu packen (-> Reiter: "Datei" -> haken bei "Jede Datei in ein eigenes Archiv packen").
Es lassen sich auch Profile vordefinieren und im Kontextmenue hinterlegen.
Allerdings ist dann nur *.rar, *.rar4 oder *.zip moeglich.
@Joe58: Danke das ist der richtige Weg. Was noch fehlt ist die Grö0e der Wiederherstellungsinformationen (10% wäre gut) und die Größe der Teildateien (z.B. 700 MB).
@Alexander2: Leider funktioniert das Script nicht unter Windows.
Wieso, hat heute nicht praktisch jeder git-bash drauf? Musst nur aufpassen, das Script mit Unix-Newlines zu speichern.
@Alexander2 Die zweite Variante mit In-den-Hintergrund-forken würde ich nicht nehmen. 7z arbeitet schon parallel, daher unnötig. Macht nur schnell den Rechner platt.
Ja, kommt definitiv auf den usecase an, bei extrem vielen Ordnern mit sehr sehr kleinen Dateien oder wenig Inhalt würde ich dem durchaus eine Chance geben. eine Begrenzung auf x parallel gestartete Instanzen wäre noch sinnvoll und möglich, aber zu viel für mal eben schnell nen Script hin pfuschen.
Das solltest du als Medienkompetenzübung doch sicher selbst in der Hilfe von 7zip nachlesen können. Die beiden Sachen kann man sicher als Parameter im Skript mit übergeben...
Edit: Übersetzung: finde alles vom Typ Directory auf der Ebene mit Tiefe 1, also nur genau die Ordner darunter, übergebe die Liste als Null-Terminierte (wegen Spaces u.a. Müll) Strings zu xargs, und xargs wirft das einzeln (-n1) auf ein Bash-Kommando, welches das unter $0 vorfindet.
ANZAHL_DER_THREADS mit gewünschtem Wert als Umg.variable setzen (z.B. 4), oder statt $ANZAHL_DER_THREADS dann eben die Anzahl da, oder $NUMBER_OF_PROCESSORS unter Windows für alle Kerne unter Windows bzw. $(nproc) unter Linux. Wenn der Rechner überfahren wird: nice -n10 vor das 7z-Kommando packen.