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.jpg
zusammengesetzt.
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
Franz war pensionierter HTL Lehrer (TGM), Präsident von ClubComputer, Herausgeber der Clubzeitung PCNEWS und betreute unser Clubtelefon und Internet Support. Er war leidenschaftlicher Rapid Wien Fan. Er ist leider Anfang Jänner 2024 nach langer schwerer Krankheit verstorben.
Neueste Kommentare