7

Я хотел сохранить большой видеофайл на диске FAT32 (~ 18 ГБ), но обнаружил, что это просто невозможно из-за ограничений файловой системы.

Существует ли простой инструмент для разбиения файла на более мелкие части, которые могут быть сохранены, а затем для их повторной сборки, когда я хочу получить заархивированный файл?

Или есть лучший способ хранения больших файлов на FAT32?

4 ответа4

10

Большинство файловых архиваторов, таких как 7-Zip, WinZip и WinRAR, позволяют разделить архив на несколько файлов. Если важна скорость, вы можете попробовать отключить сжатие программы.

В системах GNU/Linux вы можете использовать программы split и cat из пакета coreutils (например, split -b 4294967295 FOO /media/FATDISK/BAR для разбиения FOO на BARaa, BARab, ... и cat /media/FATDISK/BAR?? > FOO чтобы собрать его). Утилита split командной строки Mac OS X работает аналогичным образом.

5

В итоге я написал небольшой скрипт на Python 2 для достижения этой цели.


# Author: Alex Finkel 
# Email: alex@finkel.net

# 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()
2

У меня была именно эта проблема, и я решил ее с помощью справки из уже опубликованных ответов, но ни один из них точно не описал метод.

я использовал

split --bytes=3G infile /media/FAT32drive/outprefix

которые сохраняют infile в нескольких файлах с именами outprefixaa, outprefixab, outprefixac и т. д. с максимальным размером 3 ГБ - когда я попытался использовать 4 ГБ на Fat 32, это не удалось.

рекомбинировать файлы, которые я использовал

cat /media/FAT32drive/outprefix?? > infile

Чтобы дать более конкретную информацию, я сделал это в Windows, но с помощью окна Cygwin. Таким образом, путь к файлу в моем случае для внешнего жесткого диска FAT32 был /cydrive/e/

2

Другой вариант: используйте команду split из GNU Coreutils:

split --bytes=4G infile /media/FAT32drive/outprefix

разделить файл на 4 ГБ и сохранить их на выходной диск.

Исходный файл можно восстановить путем объединения фрагментов (с именами файлов, отсортированными по алфавиту).

Для получения информации об использовании см. Руководство по split.

Coreutils, включая split , должен быть установлен по умолчанию в Linux и Mac OS X. В Windows он доступен из GnuWin32 или из Cygwin.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .