複数のファイルに分割またはスパンするtarアーカイブを作成する方法は?


26

このページによると、tarでtarアーカイブを「分割」して100 Mbファイルに作成できます。

tar -c -M --tape-length = 102400 --file = disk1.tar largefile.tgz

問題は、このコマンドでは、最初のファイルがいっぱいになった後、次のファイルの新しいファイル名を対話形式で指定する必要があることです。

誰もがこのインタラクティブなステップをスキップし、tarに「分割」を自動的に行わせる方法を知っていますか?


回答:


19

この--new-volume-scriptオプションを見ると、プロンプトメカニズムを別のメカニズムまたは生成されたファイル名に置き換えることができます。((tar.info)Multi-Volume Archivestar情報ページ。)との問題split、あなたがする必要があることであるcatマルチボリュームアーカイブは、もう少し柔軟であるべきであるのに対し、何かをするために戻って一緒に作品。


もちろんそれは事実です。
エドゥアルドI.

2
おかげで、これが私が探していたものです!:私は今(税込例)利用できるが、ここでは、実際にいくつかの命令があることが分かったgnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
サミュエルLampa

これに関する問題は、それが過度にナンセンスであり、適切なUnixスタイルのアプリの反対を促進することです。
ヤンキュウペブリク

33

これにはsplitを使用できます。

tar czpvf - /path/to/archive | split -d -b 100M - tardisk

これはtarにデータをstdoutに送信し、分割してstdinから選択するように指示します-さらに数値サフィックス(-d)、-b100Mのチャンクサイズ()を使用し、結果のファイル名(tardisk00、tardisk01、 tardisk02など)。

後でデータを抽出するには、これを使用できます:

cat tardisk* | tar xzpvf -

1
小さな修正は、-d接頭辞ではなく数値の接尾辞です。
yclian 14

8

もちろん、使用するのに最適なオプションは--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

次のコマンドで動作するようにしました:

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)番目の部分。いくつかのシェルスクリプトでこれを修正するのは簡単なことであり、読者の演習として残しておきます。


1

tarのサイズが大きい場合は、サイズが1.1GBのファイルが自動的に作成されます。たとえば、1000 {2..1000}のように数値を増やすか、tape-length引数への入力を増やすことができます。

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.