GNU/Linux >> Linux の 問題 >  >> Linux

tbz ファイルへのファイルの追加

tar の間 既存のアーカイブにファイルを追加できますが、圧縮することはできません。 bunzip2 する必要があります 圧縮されたアーカイブで、標準の tarball が残ります。その後、 tar を使用できます ファイルを既存のアーカイブに追加し、bzip2 で再圧縮する機能 .

マニュアルから:

 -r      Like -c, but new entries are appended to the archive.  Note that this only
         works on uncompressed archives stored in regular files.  The -f option is
         required.

もう 1 つの答えは正しいです。圧縮された tar アーカイブを解凍しないと、適切に更新することはできません。 GNU tar ドキュメントはそれを示唆しており、更新しようとすると明示的なエラー メッセージが表示されて失敗します:

$ tar --concatenate --file=cat.tar.bz2 two.tar.bz2 
tar: Cannot update compressed archives
tar: Error is not recoverable: exiting now

ただし 解凍を必要としない、ちょっとした作業のようなソリューションに興味がある場合は、次の観察に基づいて提供できます:

  • cat を使用して bzip2 ストリームを追加する サポートされており、有効な bzip2 ストリームを生成します (gzip についても同様です);
  • cat を使用して tar を追加する 有効な tar ファイルを生成しないため、--concatenate オプションは存在しますが、tar に有効なふりをさせることができます:
<ブロック引用>

--concatenate を使用する代わりに、cat を使用して 2 つのアーカイブを連結したい、または使用しようとする方が直感的に思えるかもしれません。 手術;結局、cat はファイルを結合するためのユーティリティです。

ただし、tar アーカイブには、連結されたアーカイブを 1 つのアーカイブとして適切に読み取る場合に削除する必要があるファイルの終わりマーカーが組み込まれています。 --concatenate 新しい各アーカイブが追加される前に、ターゲット アーカイブからアーカイブの終了マーカーを削除します。 cat を使用してアーカイブを結合すると、結果は有効な tar 形式のアーカイブになりません。 cat ユーティリティを使用して追加されたアーカイブからファイルを取得する必要がある場合は、 --ignore-zeros を使用します (-i ) オプション。

この知識に基づいて、たとえば次のことができます。

cat {one,two}.tar.bz2 >combined.tar.bz2

上記のドキュメント スニペットで説明されているように、これは無効な tar ファイルになりますが、--ignore-zeros を使用します。 、まだ完全に読むことができます:

## Show contents of `one.tar.bz2'
$ tar tf one.tar.bz2
a
b

## Show contents of `two.tar.bz2'
$ tar tf two.tar.bz2
c

## Show contents of `combined.tar.bz2', bypassing the bad format
$ tar tif combined.tar.bz2
a
b
c

-i を省略しているのに対し、上記は元の 2 つのアーカイブから 3 つのファイルすべてを一覧表示していることに注意してください。 (正しく) 最初の元のアーカイブからのファイルのみを一覧表示します:

$ tar tf combined.tar.bz2 
a
b

繰り返しますが、これは汚いトリックにすぎませんが、書き込み側と読み取り側の両方を制御し、 -i を確実に制御できる場合に役立ちます。 この方法で作成されたファイルから読み取ろうとするときに使用されます。


Linux
  1. Linuxでファイルを圧縮および抽出するための16のtarコマンド

  2. Linuxでファイルとディレクトリをアーカイブする方法[パート1]

  3. tar エラー:アーカイブに予期しない EOF があります

  1. 複数のファイルを1つのgzファイルにgzipする方法は?

  2. 巨大な tgz ファイルから単一のファイルを抽出する

  3. アーカイブのサイズを縮小しながらファイルを解凍しますか?

  1. 隠しファイルを除いて、ディレクトリのtarアーカイブを作成しますか?

  2. 1 つのコマンドで複数の tar ファイルを連結する

  3. インデックス付きアーカイブ形式?