Anlass für diesen Artikel war die Beobachtung eines Clubmitglieds, dass der Upload seiner 8GB großen Video-Datei auf unserem cc|drive (drive.ccc.at) mit eine Fehlermeldung endet. Das Limit unseres cc|drive ist auf 512 MB eingestellt.

Ein solches Upload-Limit gibt es bei allen Cloud-Speichern und diese Limits variieren mit dem verwendeten Dienst (OneDrive wird ein geringeres Limit haben als OneDrive for Business) aber auch im Laufe der Zeit.

Eine Möglichkeit, dieses Limit zu umgehen, ist ein Aufteilen der großen Datei auf mehrere kleine Dateien, und es gibt Tools, die das Aufteilen und Zusammensetzen der Dateien bewerkstelligen.

Selbst ist der Mann!

Da wir aber eine Menge über PowerShell erfahren haben, wäre es doch nahe liegend, diesen Vorgang durch ein PowerShell-Programm ausführen zu lassen. Eine Suche nach einem geeigneten Code liefert „PowerShell Script to Split Large Files“ von jehugaleahsa auf Github. Allerdings sind das zwei Funktionen split und join, in die man die aufzuteilende Datei als Text einfügen muss. split teilt eine Datei name in Blöcke mit der Bezeichnung name.00.part, name.01.part... und join setzt diese Dateien wieder zusammen.

Damit das Programm einfacher anwendbar ist, wurde daraus eine einzige Datei parts.ps1 gemacht, die man mit den Parametern -p (=Pfad zur Datei) und -s (Größe der Teildateien, optional, Anfangswert 107.374.182) aufruft. Ruft man parts.ps1 ohne Parameter auf, erhält man einen Hilfetext:

Aufspalten und Zusammensetzen großer Dateien
============================================
-p Pfad. erforderlich
-s Blockgröße, Anfangswert 107.374.182

Das Programm parts.ps1 regelt den Umwandlungsvorgang automatisch und zwar so: wenn die aufzuteilende Datei existiert, wird sie aufgeteilt, wenn nicht, wird eine gleichnamige Datei mit einem nachgestellten 00.part gesucht, denn dann liegt eine zerteilte Datei vor. Dann wird diese Datei mit ihren weiteren Teilen 01.part,02.part...zusammengesetzt.

Beispiel

Am Desktop (s:\desktop) befindet sich die Datei test.jpg, die Datei parts.ps1 befindet sich im Pfad. Um die Bilddatei in Stücke von 2 MB aufzuteilen, schreibt man in der Konsole

parts -p s:\desktop\test.jpg -s 2000000

Die Teildateien test.jpg.00.part...test.jpg.04.part werden am Desktop angelegt.

Wiederholt man den Befehl, werden die Teildateien überschrieben.

Löscht man die ursprüngliche Datei, werden bei dem selben Aufruf (Parameter -s ist nicht erforderlich),

parts -p s:\desktop\test.jpg

die Teildateien test.jpg.00.part...test.jpg.04.part zu test.jpgzusammengesetzt.

Wo ist parts.ps1?

Ruft man auf der Kommandozeile parts.ps1 auf, dann muss sich diese Datei im Pfad befinden. Ich habe mir daher einen Ordner angelegt, dessen Pfad in der Path-Variablen gespeichert und daher wird die Datei parts.ps1 immer gefunden. Tut man das nicht, muss man für den Aufruf immer den vollständigen Pfad für parts.ps1 angeben, also zum Beispiel s:\desktop\parts.ps1.

Warum 107.374.182?

Der Programmautor hat den Anfangswert für die Größe der Blöcke auf 107,274.182 festgelegt. Diese Zahl ergibt ungefähr 100 MB aber nicht genau, weil 100 MB = 1024*1024*100 sind 104.857.600=640.0000H. Der Programmierer war ein Witzbold und verwendete als Blockgröße die Zahl 666.6666H=107.374.182.

Man kann aber jede beliebige Zahl über den Parameter -p einsetzen. Aber Achtung, würde man versehentlich eine kleine Zahl wählen, zum Beispiel 1 würden bei einer entsprechend großen Datei extrem viele kleine Dateien entstehen. Daher wurde eine Untergrenze von 1.000.000 eingebaut.

Links

Zur Werkzeugleiste springen