tar と bzip2 で圧縮した後、特定のサイズのファイルまたはディレクトリが占めるスペースを見積もる方法はありますか?

tar と bzip2 で圧縮した後、特定のサイズのファイルまたはディレクトリが占めるスペースを見積もる方法はありますか?

近々ディストリビューションを切り替える予定なので、ホーム ディレクトリをバックアップしたいと思います。ただし、ホーム ディレクトリは 29 ギガバイトです。 で圧縮すると、どのくらいの容量が必要になるか知りたいですtar cvjf home.tar /home。圧縮後のサイズを確認する方法はありますか?

答え1

このツールはtarbzip2暗黙的に使用しているためj)パイプで接続されていますwc(これはバイト数をカウントする標準(POSIX)ツールです)。次のコマンドはサイズをバイト単位で出力します。

tar cj /home | wc -c

このコマンドは、実際には (ここでは別の回答を引用しています)「時間の無駄となる最終アーカイブを書き込むことなく、圧縮プログラムのすべての作業を実行します」が、本当に知りたいのであれば、これが唯一の確実な方法です。


全体的なアプローチは次のように改善できます。

tar cj /home | tee home.tbz2 | wc -c
  • 運が良ければ、十分なスペースがあるhome.tbz2ことが判明し、エラーは発生せず、ファイルのサイズは報告されるteeサイズと同じになります。wc -c
  • それ以外の場合はteeが報告されますno space leftが、stdout への書き込みは続行されます。wc -cは、ファイルの大きさを通知します。実際の (不完全な) ファイルはこれより小さくなるため、後で削除する必要があります。

tarを使用しているときに、メッセージvを見逃す可能性がありますno space left。それでも、 から取得した出力をwc -cの実際のサイズと比較することで、何が起こったかを知ることができます。Bash では、でhome.tbz2の終了ステータスを取得できます。tee${PIPESTATUS[1]}

答え2

残念ながら、できません。圧縮アーカイブがどのくらいの大きさになるかを確認する唯一の方法は、圧縮アーカイブを作成することです。これを行うツールはありません。ツールは、最終的なアーカイブを書き込まずに圧縮プログラムのすべての作業を実行するため、時間の無駄になります。

おそらく、データを管理しやすいチャンクに分割し、複数のアーカイブを作成することを検討する必要があります。これにより、29 GB のアーカイブにかかる長い時間を、より小さなスライスに分割できます。

答え3

実際に圧縮しなければ、データがどのくらいのサイズに圧縮されるかを確実に知ることはできません。ホーム ディレクトリにあるコンテンツに基づいて推測することはできます。これを自動的に行うツールは知りませんが、難しいプロセスではありません。

最近のファイル形式の多くはすでに圧縮されているため、再度圧縮してもほとんどまたはまったくメリットがありません (またはマイナスになります)。この種類のデータは、圧縮せずにそのままコピーまたはアーカイブする方がよいでしょう。例としては、圧縮されたビデオ (mp4、webm、mov など)、圧縮された画像 (jpeg、png など)、既存のアーカイブ (zip、rar、gz、bz2 など) などがあります。

テキスト ファイルは、特に繰り返しデータ (ログ ファイルなど) が大量にある場合は、一般的にかなり圧縮されます。ファイルのサブセットをサンプリングして圧縮率を調べ、それを推測値として使用するか、50% 程度を大まかな見積もり値として使用します。

最後に、各タイプが占めるデータの割合を確認し、その割合に推定パーセンテージを掛けて、最終的なサイズを推定します。たとえば、データの 20 GB が圧縮データで、9 GB がテキスト ファイルである場合、最終的な圧縮データのサイズはおそらく 21 GB から 25 GB の範囲になります。

関連情報