Cómo almacenar archivos grandes en Fat32

Cómo almacenar archivos grandes en Fat32

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/BARpara dividir FOO en BARaa, BARab, ... y cat /media/FATDISK/BAR?? > FOOvolver a ensamblarlo). La utilidad de línea de comandos de Mac OS X splitfunciona de la misma manera.

Respuesta2

Si está buscando una solución rápida para esto, consulte las otras respuestas que incluyen 7zipo 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 splitcomando 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 elsplitmanual.

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.

información relacionada