かなり大きなディレクトリをバックアップする必要がありますが、個々のファイルのサイズによって制限があります。tar.(gz|bz2)
最大200 MBのサイズのアーカイブに分割されたアーカイブを作成したいと思います。 Clonezilla は、次のようにイメージのバックアップを分割して同様の操作を実行します。
sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac
1つのコマンドでこれを行う方法はありますか?コマンドの使い方を理解していますsplit
が、大規模なアーカイブを作成してからそれを小さなアーカイブに分割したくありません。なぜなら、最初にアーカイブを作成するのに必要なディスク容量が2倍になるからです。
答え1
tarを分割コマンドにパイプできます。
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.
ファイルを抽出するには、次のコマンドを使用します(@Naftuli Kayが述べたように)。
cat sda1.backup.tar.gz.* | tar xzvf -
答え2
tar
分割アーカイブ
私はこれが次の理由で最善の解決策だと思いました。
- インタラクションなしで部品を作成し、自動的に部品名を指定します。
- 必要な圧縮、一般的な
tar
オプションを使用できます。 - 必要外部なし分割またはマージコマンド
- 追加のディスク容量を使用しない(中級)
- 各アーカイブがそうであるように、すべてのDeararchiverはそれを簡単に処理できます。独立
- 各アーカイブが独立しており、ファイルが複数のアーカイブにまたがっていないため、セキュリティが向上しました。
このコマンドは圧縮せずに2GBブロックを生成します。
tar -cv --tape-length=2097000 --file=my_archive-{0..50}.tar file1 file2 dir3
- 氏作成に使用
- V詳細については、アーカイブに追加されたファイルのリストを参照してください。
- --テープ長ブロックサイズです。サフィックスを追加でき、省略するとKB単位と見なされます(したがって2GBは200万)。
- - 文書私たちの場所魔法的にブロック名を作成する:ランダムに50個を与えましたが、十分に大きい数字を入力でき、必要なものだけが使用されます。
- アーカイブに含めるファイルとディレクトリのリスト
同様に、このコマンドは1GBチャンクを生成します。アーカイブ圧縮:
tar -czv --tape-length=2097000 --file=my_archive-{0..50}.tar.gz file1 file2 dir3
答え3
macOSでは、split
コマンドは少し異なる動作をします。
$ tar cvzf - foo | split -b 2500m - foo.tgz.
答え4
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"