如何在 Fat32 上儲存大文件

如何在 Fat32 上儲存大文件

我想在 FAT32 驅動器(~18 GB)上儲存一個大視訊文件,但我發現由於文件系統的限制,這是不可能的。

是否有一個簡單的工具可以將文件分割成可儲存的較小部分,然後在我想檢索存檔文件時重新組裝它們?

或者有更好的方法在 FAT32 上儲存大檔案嗎?

答案1

大多數文件歸檔器,例如7-拉鍊、WinZip 和 WinRAR,允許您將檔案拆分為多個檔案。如果速度很重要,您可以嘗試停用程式的壓縮部分。

在 GNU/Linux 系統上,您可以使用分裂coreutils 套件中的程序(例如,split -b 4294967295 FOO /media/FATDISK/BAR將 FOO 拆分為 BARaa、BARab...並cat /media/FATDISK/BAR?? > FOO重新組裝)。 Mac OS X 的命令列split實用程式的運作方式相同。

答案2

如果您正在尋找對此問題的快速解決方案,請參閱以7zip或為特色的其他答案split這更多的是一個樂趣解決方案。

我最終編寫了一個小型的 Python 2 腳本來實現這一目標。


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

答案3

另一個選擇:使用splitGNU Coreutils 中的命令:

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

將檔案拆分為 4 GB 區塊並將區塊儲存到輸出磁碟機。

可以透過連接區塊(檔案名稱按字母順序排序)來恢復原始檔案。

有關使用信息,請參閱split手動的

Coreutils,包括split,應該預設安裝在 Linux 和 Mac OS X 上。可從 GnuWin32 取得,或來自 Cygwin。

答案4

若要在 vfat 上建立最大允許大小(2³²-1 位元組)的文件,請使用下列命令(在 bash 中):

split --bytes=$((2**32-1)) infile /media/FAT32drive/outprefix

或者,如果您不想使用 bash 的內聯數學:

split --bytes=4294967295 infile /media/FAT32drive/outprefix

「--bytes=4G」失敗,因為 4G 等於 2³² 位元組,這比 vFAT 上的最大檔案大小剛好多了一個位元組。

相關內容