このページによると、tarでtarアーカイブを「分割」して100 Mbファイルに作成できます。
tar -c -M --tape-length = 102400 --file = disk1.tar largefile.tgz
問題は、このコマンドでは、最初のファイルがいっぱいになった後、次のファイルの新しいファイル名を対話形式で指定する必要があることです。
誰もがこのインタラクティブなステップをスキップし、tarに「分割」を自動的に行わせる方法を知っていますか?
このページによると、tarでtarアーカイブを「分割」して100 Mbファイルに作成できます。
tar -c -M --tape-length = 102400 --file = disk1.tar largefile.tgz
問題は、このコマンドでは、最初のファイルがいっぱいになった後、次のファイルの新しいファイル名を対話形式で指定する必要があることです。
誰もがこのインタラクティブなステップをスキップし、tarに「分割」を自動的に行わせる方法を知っていますか?
回答:
この--new-volume-script
オプションを見ると、プロンプトメカニズムを別のメカニズムまたは生成されたファイル名に置き換えることができます。((tar.info)Multi-Volume Archives
中tar
情報ページ。)との問題split
、あなたがする必要があることであるcat
マルチボリュームアーカイブは、もう少し柔軟であるべきであるのに対し、何かをするために戻って一緒に作品。
これにはsplitを使用できます。
tar czpvf - /path/to/archive | split -d -b 100M - tardisk
これはtarにデータをstdoutに送信し、分割してstdinから選択するように指示します-さらに数値サフィックス(-d
)、-b
100Mのチャンクサイズ()を使用し、結果のファイル名(tardisk00、tardisk01、 tardisk02など)。
後でデータを抽出するには、これを使用できます:
cat tardisk* | tar xzpvf -
-d
接頭辞ではなく数値の接尾辞です。
もちろん、使用するのに最適なオプションは--new-volume-script
オプションです。
ただし、ファイルのサイズ(この場合、largefile.tgz)がわかっている場合は、次のこともできます。
tar -c -M -L 102400 --file=disk1.tar --file=disk2.tar --file=disk3.tar largefile.tgz
概要:
-c = Create
-M = multi-volume
-L 102400 = 100MB files (disk1.tar, disk2.tar, disk3.tar ...)
(-Lの場合、tarファイルの合計がlargefile.tgzより大きくなるように、必要な数だけ指定します)
tar
ディレクトリツリー構造にしようとしている場合
次のコマンドで動作するようにしました:
mkdir -p ./split
rm -rf ./split/*
tar -cML 102400 -F 'cp "${TAR_ARCHIVE}" \
./split/part_${TAR_VOLUME}.tar' \
-f split/part_1.tar large_file.tar.gz
唯一の問題は、part_1.tar
実際には最後のファイルになり、他のファイルは1つシフトされることです。すなわちpart_2.tar
、実際に最初の部分であり、part_k.tar
ある(n - 1)
番目の部分。いくつかのシェルスクリプトでこれを修正するのは簡単なことであり、読者の演習として残しておきます。