web-dev-qa-db-ja.com

ディレクトリを特定のサイズ以下の独立したアーカイブファイルにtarする

多くのファイルを含むディレクトリがあります。これらのファイルを合わせると、数ギガバイトのスペースを占有します。このディレクトリを圧縮したいのですが。

ただし、ディレクトリを1つのファイルに圧縮すると、そのファイルを移動するのが難しくなるため、複数のファイルが必要です。

私は使用できます:

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

これを行うには、データを復活させるためにすべてのバックアップファイルが必要になるのではないかと心配しています。各ファイルは、ソースデータの一部を含む独自の独立したユニットであることが非常に望ましいです。

これを行うために私が考えることができる1つの方法は、各入力ファイルのサイズを計算し、最大サイズに達するまでファイルをリストに貪欲に追加するスクリプトを作成することです。次に、ファイルのリストが風袋引きされ、新しいリストが開始されます。これは、すべてのファイルがtarになるまで繰り返されます。その後、タールを個別に抽出できます。

これは他の質問の重複ではありません。アーカイブ全体のすべての部分がそれ自体有効なアーカイブであり、アーカイブを結合することなくすべてのファイルを再構築できるように、この操作を実行する方法を特に考えているからです。

そのようなことをするユーティリティはありますか?

6
Richard

tarは、分割後の部分的なアーカイブに対応できます。このようなアーカイブの一部を復元しようとすると、最初は使用できないものはすべてスキップされ、最後に部分的なファイルについて通知されます。その間のすべてが適切に復元されます。テープの長さのオプションを使用して、アーカイブの作成時にアーカイブを分割するようにtar自体に指示できます。詳細については、 最大サイズのブロックに分割されたtarアーカイブを作成する を参照してください。

ただし、それよりも優れており、スタンドアロンのアーカイブの一部を生成するユーティリティがあります(サイズ制限がアーカイブに最大のファイルを格納するのに十分である限り)。残念ながら、私が知っているものはすべての要件を満たしていません。ほとんどのプラットフォームには、Zipファイルを分割できる zipsplit がありますが、最大2GBのサイズのアーカイブしか処理できません。プラン9には、タールボールを分割する tarsplit がありますが、使用しているシステムに簡単に移植できるかどうかはわかりません(プラン9を使用していないと思われます) ...)。

4
Stephen Kitt