早上好,
我有一个 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.