約17〜20 GBの大きなファイルを圧縮する必要があります。ファイルごとに約1GBのいくつかのファイルに分割する必要があります。
私はGoogleを介してソリューションを検索し、split
およびcat
コマンドを使用する方法を見つけました。しかし、それらは大きなファイルに対してはまったく機能しませんでした。また、これらはWindowsでは機能しません。Windowsマシンで抽出する必要があります。
約17〜20 GBの大きなファイルを圧縮する必要があります。ファイルごとに約1GBのいくつかのファイルに分割する必要があります。
私はGoogleを介してソリューションを検索し、split
およびcat
コマンドを使用する方法を見つけました。しかし、それらは大きなファイルに対してはまったく機能しませんでした。また、これらはWindowsでは機能しません。Windowsマシンで抽出する必要があります。
回答:
split
次の-b
オプションを指定してコマンドを使用できます。
split -b 1024m file.tar.gz
@ Joshuaの回答を使用して、Windowsマシンで再構成できます。
copy /b file1 + file2 + file3 + file4 filetogether
編集:@Charlieが以下のコメントで述べているように、プレフィックスを明示的に設定する必要があるx
場合があります。そうしないと混乱を招く可能性があります。
split -b 1024m "file.tar.gz" "file.tar.gz.part-"
// Creates files: file.tar.gz.part-aa, file.tar.gz.part-ab, file.tar.gz.part-ac, ...
編集:質問が閉じており、最も効果的な解決策がこの回答の内容に非常に近いため、投稿を編集します。
# create archives
$ tar cz my_large_file_1 my_large_file_2 | split -b 1024MiB - myfiles_split.tgz_
# uncompress
$ cat myfiles_split.tgz_* | tar xz
このソリューションにより、(圧縮を解除する)ときに中間の大きなファイルを使用する必要がなくなります。結果のファイルに別のディレクトリを使用するには、tar -Cオプションを使用します。ところで、アーカイブが単一のファイルのみで構成されている場合は、tarを避け、gzipのみを使用できます。
# create archives
$ gzip -c my_large_file | split -b 1024MiB - myfile_split.gz_
# uncompress
$ cat myfile_split.gz_* | gunzip -c > my_large_file
Windowsの場合は、同じコマンドの移植版をダウンロードするか、cygwinを使用できます。
-b 1024MiB
すると無効なバイト数であるというエラーが出ました。--bytes=1024m
作品を使う。
cat
、ファイルを再構成するためにを使用する必要はありません。copy /b file1 + file2 + etc..
Windowsで使用してから、Linuxにコピーして戻すと、tarは再構成されたtarballを読み取ることができます。試してみたところです。
--numeric-suffixes
。アルファベットではなく数値のサフィックスを使用します。
Linuxから分割する場合でも、Windowsで再構築できます。
copy /b file1 + file2 + file3 + file4 filetogether
copy /b file* filetogether
- support.microsoft.com/kb/71161
tarを使用して複数のアーカイブに分割する
cygwinを含め、Windowsのtarファイルで動作するプログラムはたくさんあります。
テストされたコードは、最初に単一のアーカイブファイルを作成し、次にそれを分割します。
gzip -c file.orig > file.gz
CHUNKSIZE=1073741824
PARTCNT=$[$(stat -c%s file.gz) / $CHUNKSIZE]
# the remainder is taken care of, for example for
# 1 GiB + 1 bytes PARTCNT is 1 and seq 0 $PARTCNT covers
# all of file
for n in `seq 0 $PARTCNT`
do
dd if=file.gz of=part.$n bs=$CHUNKSIZE skip=$n count=1
done
このバリアントは、単一のアーカイブファイルの作成を省略し、パーツの作成に直接進みます。
gzip -c file.orig |
( CHUNKSIZE=1073741824;
i=0;
while true; do
i=$[i+1];
head -c "$CHUNKSIZE" > "part.$i";
[ "$CHUNKSIZE" -eq $(stat -c%s "part.$i") ] || break;
done; )
このバリアントでは、アーカイブのファイルサイズがで割り切れる$CHUNKSIZE
場合、最後の部分ファイルのファイルサイズは0バイトになります。
split
はすでに何をしているかです。