笔记:

笔记:

早上好,

我有一个 tar 压缩档案 tar.bzip2 (使用 创建tar jcf),其中包含一个名为数据.txt (1)。另一方面,我还有另一个文件也名为数据.txt (2)

有没有办法追加文件(2)到文件末尾(1)没有解压 bz2 存档,追加文件然后再次将其恢复?
顺便说一句,我已经完成了这三个步骤,我只是出于好奇(或“出于好奇”......不确定英语中的这个表达)。

我一直在寻找正确的选择,但找不到:

  • -r选项告诉我“中止”,我猜是因为我试图附加存档中已存在的文件。
  • -u无法更新压缩档案,尽管我认为它只会替换(1)经过(2)
  • -A还告诉我“中止”。我不太确定这个选项的作用。它似乎将一个存档中的文件添加到另一个现有存档中。所以这不是我想要的。

我在 Linux 上使用 GNU tar 1.15.1。

笔记:

我想我解释得不够好,所以我最好用一个例子:
我有一个名为数据.tar.bz2其中包含一个名为数据.txt (1)。其内容可以是

A

我还有另一个文件也命名为数据.txt (2)。其内容可以是

我的目的是包含在数据.tar.bz2两者都有(1)(2)当然,文件内容位于一个名为的文件中,数据.txt:

甲乙

换句话说,使用一个命令即可完成此操作,无需解压缩、untar、创建临时目录等...:

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/

安装后,您将能够浏览存档,就像它是常规目录一样。从那里,您可以编辑/更新或将内容附加到存档中的文件。

这里您有更多有关使用的详细信息,下面是我编辑 bzip2 文件archivemount时来自我的服务器的片段。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.

相关内容