Quería almacenar un archivo de vídeo grande en una unidad FAT32 (~18 GB), pero descubrí que esto no es posible simplemente debido a las limitaciones del sistema de archivos.
¿Existe alguna herramienta sencilla para dividir el archivo en partes más pequeñas que se puedan almacenar y luego volver a ensamblarlas cuando desee recuperar el archivo archivado?
¿O existe una mejor manera de almacenar archivos grandes en FAT32?
Respuesta1
La mayoría de los archivadores de archivos, como7 cremalleras, WinZip y WinRAR le permiten dividir un archivo en varios archivos. Si la velocidad es importante, puedes intentar desactivar la parte de compresión del programa.
En sistemas GNU/Linux, puede utilizar eldividirygatoprogramas del paquete coreutils (por ejemplo, split -b 4294967295 FOO /media/FATDISK/BAR
para dividir FOO en BARaa, BARab, ... y cat /media/FATDISK/BAR?? > FOO
volver a ensamblarlo). La utilidad de línea de comandos de Mac OS X split
funciona de la misma manera.
Respuesta2
Si está buscando una solución rápida para esto, consulte las otras respuestas que incluyen 7zip
o split
.Esto es más bien undivertidosolución.
Terminé escribiendo un pequeño script en Python 2 para lograrlo.
# 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()
Respuesta3
Otra opción: usar el split
comando de GNU Coreutils:
split --bytes=4G infile /media/FAT32drive/outprefix
para dividir el archivo en fragmentos de 4 GB y guardar los fragmentos en la unidad de salida.
El archivo original se puede recuperar concatenando los fragmentos (con los nombres de archivo ordenados alfabéticamente).
Para obtener información de uso, consulte elsplit
manual.
Coreutils, incluido split
, debe instalarse de forma predeterminada en Linux y Mac OS X. En Windows, esdisponible en GnuWin32, o de Cygwin.
Respuesta4
Para crear archivos con el tamaño máximo permitido en vfat (2³²-1 bytes), use el siguiente comando (en bash):
split --bytes=$((2**32-1)) infile /media/FAT32drive/outprefix
o, si no desea utilizar las matemáticas en línea de bash:
split --bytes=4294967295 infile /media/FAT32drive/outprefix
El '--bytes=4G' falla porque 4G equivale a 2³² bytes, que es exactamente un byte más que el tamaño máximo de archivo en vFAT.