メモ:

メモ:

おはようございます、

tar圧縮アーカイブtar.bzip2があります(次をtar jcf使用して作成されます)。データ.txt (1)。一方、名前の異なるファイルもあります。データ.txt (2)

ファイルを追加する方法はありますか?(2)ファイルの最後まで(1)bz2アーカイブを解凍し、ファイルを追加してから復元しませんか?
ところで、私はこの3つのステップを実行しました。ただ好奇心で(または「out of 好奇心」…英語でこの表現がわからない)してしまったのです。

正しいオプションを探していましたが、見つかりませんでした。

  • -rオプションに「中断」と表示されます。アーカイブにすでに存在するファイルを追加しようとしているためです。
  • -u置き換えると思いましたが、圧縮されたアーカイブを更新できませんでした。(1)渡す(2)
  • -Aまた、「中断」するように言いました。このオプションの機能が何であるかよくわかりません。あるアーカイブのファイルを別の既存のアーカイブに追加するようです。だからこれは私が望むものではありません。

私はLinuxでGNU tar 1.15.1を使用しています。

メモ:

私が十分に説明していないようで、例を挙げてみましょう
データ.tar.bz2というファイルが含まれています。データ.txt (1)。その内容は次のとおりです。

名前の異なるファイルもありますデータ.txt (2)。その内容は次のとおりです。

第二

私の意図はデータ.tar.bz2両方(1)そして(2)もちろん、ファイルの内容は次のファイルにあります。データ.txt:


AとB

つまり、解凍、解凍、一時ディレクトリの作成などの作業を行う必要なく、1 つのコマンドで実行します。

mkdir $tempDir
tar jxf data.tar.bz2 -C $tempDir
cat data.txt >> $tempDir/data.txt
tar jcf data.tar.bz2 -C $tempDir data.txt 
rm -r $tempDir 

はい、追加したいが、-rそのオプションは機能しません。記憶が正しい場合は、ファイルをアーカイブに追加しますが、アーカイブ内の既存のファイルの内容は追加しないためです。これが明確になることを願っています...全くわかりませんxD

答え1

data.txttarアーカイブの唯一のファイルの場合は、直接追加できますが、tarまったく使用しないでください。

$ echo Hello | bzip2 > data.txt.bz2
$ echo Stack | bzip2 >> data.txt.bz2
$ echo Exchange | bzip2 >> data.txt.bz2
$ bunzip2 < data.txt.bz2
Hello
Stack
Exchange

答え2

スイッチを使用して、圧縮されていないtarアーカイブにファイルを追加できます--append。たとえば、次のようになります。

$ tar --append --file=tarfile.tar data.txt

既存のアーカイブに同じ名前の複数のファイルを追加すると、どのような結果が発生するかを確認してください。

http://www.gnu.org/software/tar/manual/html_node/append.html

私が知っている限り、圧縮アーカイブ内のファイルを最初に解凍しないと、ファイルを追加または更新できません。

答え3

これを行うには、Archivemountユーティリティのみを考えることができます。

1)インストールしますarchivemount(コンピュータにまだインストールされていない場合)。 EPELリポジトリにあります。

2)このarchivemountコマンドを使用して、tarファイルをコンピュータの任意のディレクトリにマウントします。

archivemount xyz.bzip2 /path/to/a/directory/

インストールすると、通常のディレクトリのようにアーカイブを参照できます。ここでは、アーカイブのファイルにコンテンツを編集/更新または追加できます。

ここ使い方の詳細は次のとおりです。以下は、archivemountbzip2ファイルを編集したときに私のサーバーから取得したものです。archivemount

[root@server usr]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       15G  9.0G  5.1G  64% /
none            245M     0  245M   0% /dev/shm
[root@server usr]# archivemount puppet_codes.bzip2 /usr/local/archtest/
[root@server usr]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       15G  9.0G  5.1G  64% /
none            245M     0  245M   0% /dev/shm
archivemount   1000G     0 1000G   0% /usr/local/archtest
[root@server usr]# ls /usr/local/archtest
puppet_codes
[root@server usr]# cat /usr/local/archtest/puppet_codes/emaillist.txt
[email protected]
[email protected]
[root@server usr]#

以下は私がサーバーにインストールしたパッケージです。

[root@server ~]# rpm -qi archivemount-0.8.1-2.el6.x86_64
Name        : archivemount                 Relocations: (not relocatable)
Version     : 0.8.1                             Vendor: Fedora Project
Release     : 2.el6                         Build Date: Sun Oct 13 17:06:30 2013
Install Date: Wed Dec 17 13:45:01 2014         Build Host: buildvm-04.phx2.fedoraproject.org
Group       : System Environment/Libraries   Source RPM: archivemount-0.8.1-2.el6.src.rpm
Size        : 70774                            License: LGPLv2+
Signature   : RSA/8, Sun Oct 13 18:43:34 2013, Key ID 3b49df2a0608b895
Packager    : Fedora Project
URL         : http://www.cybernoia.de/software/archivemount/
Summary     : FUSE based filesystem for mounting compressed archives
Description :
Archivemount is a piece of glue code between libarchive and FUSE. It can be
used to mount a (possibly compressed) archive (as in .tar.gz or .tar.bz2)
and use it like an ordinary filesystem.

関連情報