このページ によれば、tarはtarアーカイブを100 Mbファイルに「分割」して作成できます。
tar -c -M --tape-length = 102400 --file = disk1.tar largefile.tgz
問題は、このコマンドでは、最初のファイルがいっぱいになった後で、対話的に次のファイルの新しいファイル名を指定する必要があることです。
誰かがこのインタラクティブなステップをスキップし、タールに「分割」を自動的に行わせる方法を知っていますか?
--new-volume-script
オプションを見てください。これにより、プロンプトメカニズムを別のメカニズムまたは生成されたファイル名に置き換えることができます。 (tar
情報ページの(tar.info)Multi-Volume Archives
。)split
の問題は、何でもするためにピースをcat
一緒に戻す必要があることですが、マルチボリュームアーカイブもう少し柔軟にする必要があります。
これには分割を使用できます:
tar czpvf - /path/to/archive | split -d -b 100M - tardisk
これは、データをstdoutに送信し、分割してstdinから選択するようにtarに指示します-さらに数値サフィックス(-d
)、チャンクサイズ(-b
)100Mで、結果のファイル名(tardisk00、tardisk01、tardisk02など)のベースとして「tardisk」を使用します。
後でデータを抽出するには、これを使用できます。
cat tardisk* | tar xzpvf -
もちろん、使用するのに最適なオプションは--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
しようとしている場合
サイズが1.1GBのファイルが自動的に作成されます。tarのサイズが大きい場合は、数値を増やすことができます。たとえば、1000 {2..1000}にするか、tape-length引数への入力を増やすことができます。
tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
次のコマンドで動作するようになりました。
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)
番目 部。シェルスクリプトを使用してこれを修正するのは簡単で、読者のための演習として残しました。