おはようございます、
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.txt
tarアーカイブの唯一のファイルの場合は、直接追加できますが、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/
インストールすると、通常のディレクトリのようにアーカイブを参照できます。ここでは、アーカイブのファイルにコンテンツを編集/更新または追加できます。
ここ使い方の詳細は次のとおりです。以下は、archivemount
bzip2ファイルを編集したときに私のサーバーから取得したものです。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.