Eu queria armazenar um arquivo de vídeo grande em uma unidade FAT32 (~18 GB), mas descobri que isso não é simplesmente possível devido às limitações do sistema de arquivos.
Existe uma ferramenta simples para dividir o arquivo em partes menores que podem ser armazenadas e, em seguida, remontá-las quando eu quiser recuperar o arquivo arquivado?
Ou existe uma maneira melhor de armazenar arquivos grandes em FAT32?
Responder1
A maioria dos arquivadores de arquivos, como7-Zip, WinZip e WinRAR permitem dividir um arquivo em vários arquivos. Se a velocidade for importante, você pode tentar desabilitar a parte de compactação do programa.
Em sistemas GNU/Linux, você pode usar odividiregatoprogramas do pacote coreutils (por exemplo, split -b 4294967295 FOO /media/FATDISK/BAR
para dividir o FOO em BARaa, BARab, ... e cat /media/FATDISK/BAR?? > FOO
remontá-lo). O utilitário de linha de comando do Mac OS X split
funciona da mesma maneira.
Responder2
Se você está procurando uma solução rápida para isso, consulte as outras respostas que apresentam 7zip
ou split
.Isto é mais umdiversãosolução.
Acabei escrevendo um pequeno script Python 2 para conseguir isso.
# 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()
Responder3
Outra opção: use o split
comando do GNU Coreutils:
split --bytes=4G infile /media/FAT32drive/outprefix
para dividir o arquivo em pedaços de 4 GB e salvar os pedaços na unidade de saída.
O arquivo original pode ser recuperado concatenando os pedaços (com nomes de arquivos classificados em ordem alfabética).
Para informações de uso, consulte osplit
manual.
Coreutils, incluindo split
, devem ser instalados por padrão no Linux e Mac OS X. No Windows, édisponível no GnuWin32, ou do Cygwin.
Responder4
Para criar arquivos com tamanho máximo permitido em vfat (2³²-1 bytes), utilize o seguinte comando (em bash):
split --bytes=$((2**32-1)) infile /media/FAT32drive/outprefix
ou, se você não quiser usar a matemática embutida do bash:
split --bytes=4294967295 infile /media/FAT32drive/outprefix
O '--bytes=4G' falha, porque 4G é igual a 2³² bytes, que é exatamente um byte a mais que o tamanho máximo de arquivo no vFAT.