Ich wollte eine große Videodatei auf einem FAT32-Laufwerk (~18 GB) speichern, habe jedoch festgestellt, dass dies aufgrund von Einschränkungen des Dateisystems einfach nicht möglich ist.
Gibt es ein einfaches Tool, mit dem ich die Datei in kleinere, speicherbare Teile aufteilen und diese dann wieder zusammensetzen kann, wenn ich die archivierte Datei abrufen möchte?
Oder gibt es eine bessere Möglichkeit, große Dateien auf FAT32 zu speichern?
Antwort1
Die meisten Dateiarchivierungsprogramme, wie7-Zip, WinZip und WinRAR ermöglichen es Ihnen, ein Archiv auf mehrere Dateien aufzuteilen. Wenn Geschwindigkeit wichtig ist, können Sie versuchen, die Komprimierungsfunktion des Programms zu deaktivieren.
Auf GNU/Linux-Systemen können Sie denTeiltUndKatzeProgramme aus dem Paket coreutils (z. B. split -b 4294967295 FOO /media/FATDISK/BAR
um FOO in BARaa, BARab, ... aufzuspalten und cat /media/FATDISK/BAR?? > FOO
wieder zusammenzusetzen). Das Kommandozeilenprogramm von Mac OS X split
funktioniert auf die gleiche Weise.
Antwort2
Wenn Sie nach einer schnellen Lösung hierfür suchen, sehen Sie sich bitte die anderen Antworten mit 7zip
oder an split
.Das ist eher einSpaßLösung.
Um dies zu erreichen, habe ich schließlich ein kleines Python 2-Skript geschrieben.
# Author: Alex Finkel
# Email: [email protected]
# This program splits a large binary file into smaller pieces, and can also
# reassemble them into the original file.
# To split a file, it takes the name of the file, the name of an output
# directory, and a number representing the number of desired pieces.
# To unsplit a file, it takes the name of a directory, and the name of an
# output file.
from sys import exit, argv
from os import path, listdir
def split(file_to_split, output_directory, number_of_chunks):
f = open(file_to_split, 'rb')
assert path.isdir(output_directory)
bytes_per_file = path.getsize(file_to_split)/int(number_of_chunks) + 1
for i in range(1, int(number_of_chunks)+1):
next_file = open(path.join(output_directory, str(i)), 'wb')
next_file.write(f.read(bytes_per_file))
next_file.close()
f.close()
def unsplit(directory_name, output_name):
assert path.isdir(directory_name)
files = map(lambda x: str(x), sorted(map(lambda x: int(x), listdir(directory_name))))
out = open(output_name, 'wb')
for file in files:
f = open(path.join(directory_name, file), 'rb')
out.write(f.read())
f.close()
out.close()
if len(argv) == 4:
split(argv[1], argv[2], argv[3])
elif len(argv) == 3:
unsplit(argv[1], argv[2])
else:
print "python split_large_file.py file_to_split output_directory number_of_chunks"
print "python split_large_file.py directory name_of_output_file"
exit()
Antwort3
Eine andere Möglichkeit: Verwenden Sie den split
Befehl von GNU Coreutils:
split --bytes=4G infile /media/FAT32drive/outprefix
um die Datei in 4-GB-Blöcke aufzuteilen und die Blöcke auf dem Ausgabelaufwerk zu speichern.
Die Originaldatei kann durch Aneinanderfügen der Blöcke (mit alphabetisch sortierten Dateinamen) wiederhergestellt werden.
Informationen zur Verwendung finden Sie imsplit
Handbuch.
Coreutils, einschließlich split
, sollten standardmäßig unter Linux und Mac OS X installiert sein. Unter Windows ist esverfügbar unter GnuWin32oder von Cygwin.
Antwort4
Zum Erstellen von Dateien mit der maximal zulässigen Größe auf vfat (2³²-1 Bytes) verwenden Sie den folgenden Befehl (in Bash):
split --bytes=$((2**32-1)) infile /media/FAT32drive/outprefix
oder, wenn Sie die Inline-Mathematik von Bash nicht verwenden möchten:
split --bytes=4294967295 infile /media/FAT32drive/outprefix
Die Option „--bytes=4G“ schlägt fehl, da 4G 2³² Bytes entspricht, was genau ein Byte mehr ist als die maximale Dateigröße bei vFAT.