大きなビデオ ファイル (約 18 GB) を FAT32 ドライブに保存したかったのですが、ファイル システムの制限により、これは単純には不可能であることがわかりました。
ファイルを保存可能な小さな部分に分割し、アーカイブされたファイルを取得するときにそれらを再構成するための簡単なツールはありますか?
あるいは、FAT32 に大きなファイルを保存するより良い方法はありますか?
答え1
答え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
別のオプション: split
GNU Coreutils のコマンドを使用します。
split --bytes=4G infile /media/FAT32drive/outprefix
ファイルを 4 GB のチャンクに分割し、チャンクを出力ドライブに保存します。
チャンクを連結することで元のファイルを復元できます (ファイル名はアルファベット順に並べられます)。
使用方法については、split
マニュアル。
Coreutils(を含む)はsplit
、LinuxとMac OS Xではデフォルトでインストールされています。Windowsでは、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 の最大ファイル サイズよりちょうど 1 バイト大きいためです。