最大サイズのブロックに分割されたtarアーカイブを作成します


83

かなり大きなディレクトリをバックアップする必要がありますが、個々のファイルのサイズによって制限されます。基本的に、tar.(gz|bz2)最大200MBのアーカイブに分割されるアーカイブを作成したいと思います。Clonezillaは、次のような名前のイメージバックアップを分割することにより、これに似た処理を行います。

sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac

1つのコマンドでこれを行う方法はありますか?splitコマンドの使用方法は理解していますが、巨大なアーカイブを1つ作成してから、それを小さなアーカイブに分割する必要はありません。これにより、最初にアーカイブを作成するために必要なディスクスペースが2倍になります。


回答:


108

tarをsplitコマンドにパイプすることができます。

tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.

一部の* nixシステム(OS Xなど)では、次のエラーが表示される場合があります。

split: illegal option -- -

その場合、これを試してください(注意してください-b 200m):

tar cvzf - dir/ | split -b 200m - sda1.backup.tar.gz.

FAT32形式のドライブに収まるようにファイルを分割しようとしている場合は、4294967295のバイト制限を使用してください。次に例を示します。

tar cvzf - /Applications/Install\ macOS\ Sierra.app/ | \
split -b 4294967295 - /Volumes/UNTITLED/install_macos_sierra.tgz.

3
すばらしいです!アーカイブを抽出するにはどうすればよいですか?
ナフトゥリケイ

24
ウィルcat sda1.backup.tar.gz.* | tar xzvf -仕事をしますか?
ナフトゥリケイ

3
はい、そうすべきです。splitデフォルトでは、LOCALE(シェルグロビングによって行われます)で並べ替えられたときに正しい順序になるように、ファイルの名前を設定します。
ヨルダン

4
冗長ずに、ただやるtar czf ...なしvとすることによりマージcat backup.tar.gz.* | tar tar xzf - なしv。ここでは、詳細出力のメリットはありませんv
レオレオポルドヘルツ

1
XcodeをFAT32フォーマットのフラッシュドライブにパックすることで友人を助けました:(tar cvzf - Xcode.app/ | split -b 2000m - /Volumes/PH/xcode/xcode.tgz使用元cd /Applications/)ありがとうございました:)
ecth


4

追加するだけ:vfat / fat32で許可される最大ファイルサイズは2 ^ 32-1(4294967295バイト)なので、そのようなファイルシステムで許可される最大ファイルサイズのsplitコマンドは次のとおりです。

split -b4294967295 -d my_input_file my_output_file_splitted

3
serega@serega-sv:~$ tar -c  -M --tape-length=1024 --file /tmp/pseudo-tape.tar --new-volume-script=/tmp/new-volume.sh --volno-file=/tmp/volno /tmp/stuff-to-archive 
tar: Removing leading `/' from member names
moving /tmp/pseudo-tape.tar to /tmp/archive.1
moving /tmp/pseudo-tape.tar to /tmp/archive.2
moving /tmp/pseudo-tape.tar to /tmp/archive.3

pseudo-tape.tarファイルを新しい名前に移動する自動化のためのスクリプトが必要になります。

serega@serega-sv:~$ cat /tmp/new-volume.sh 
dir="/tmp"
base_name="pseudo-tape.tar"
next_volume_name=`echo -n "archive."; cat $dir/volno`
echo "moving $dir/$base_name to $dir/$next_volume_name"
mv "$dir/$base_name" "$dir/$next_volume_name"

私はあなたの答えを否定しませんでした-M --tape-length。ただし、この回答は、gzipまたはbzip2圧縮を使用するソリューションに対するOPの要求を無視します。
サンパブロクパー

注意:あなたは話してtarいるのではなく、gtar(GNU tar)と呼ばれるtarクローンについて話している。このtarクローンは、マルチボリュームアーカイブの作成をサポートしますが、フォローアップボリュームが適切な継続部分ではないと誤って主張するため、これらのマルチボリュームアーカイブから抽出することができない/不本意な可能性があります。
気味悪い
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.