也许整个问题的变体是:tar
除了保留 Linux 文件权限和用户/组标志之外,还有其他归档工具吗?
我想在我的 ubuntu 机器上创建目录树的存档。目录树很大,第一次运行就tar cvpzf archive.tgz /home/foo/bar
产生了 5GB 的存档。
我还想保留所有权限和其他标志和特殊文件。
5GB 的存档我没问题,但是要查看该存档内部 -- 因为它是压缩的 tar 存档 -- 必须先解压整个 5GB!(或者使用存档查看器打开时显示为这样 -- 我很高兴得到纠正。)
因此,我需要一种方法来“备份”目录(树),同时保留完整的文件系统属性和权利,并创建一个带有“索引”的档案,无需解压即可浏览其内容。
编辑:指定我认为的档案,之后Whalley 的回答:
档案可以是单个文件,也可以是包含以下内容的(小)文件集满的和完全的此文件内的信息。也就是说,它可以存在于任何文件系统中(大小允许),可以刻录到 DVD 上,您可以split
这样做(之后这个问题的重点就真的消失了 - 但仍然如此),...
答案1
您是否知道 tar 的 t 函数可以打印出存档的内容?您可以在 gzip 压缩存档上使用它,如下所示:
tar ztvf archive.tgz
它会以长列表格式打印出文件,包括时间戳和大小。事实证明,如果您在创建存档时使用两个 v 选项,它会在将文件添加到存档时列出长列表(而不是仅仅列出它们),因此您可以执行类似这样的操作,在一次备份时自动创建索引:
tar cvvpzf archive.tgz /home/foo/bar > archive.tgz.index
请注意两个 v 选项的使用。许多其他命令允许您通过这种方式增加详细程度(例如 ssh)。
答案2
我多次遇到过这个问题。以下是我找到的解决办法。
压缩
.zip
如果使用大多数 Linux 系统上安装的 zip 实用程序创建,则文件支持 unix 权限和符号链接。但是,它不支持全部支持的扩展tar
,例如硬链接和扩展属性。但是您可以从 ZIP 存档中提取文件,而无需先解压整个存档,所以这是一个胜利。
壁球
如果你正在寻找一个可挂载的压缩只读文件系统,那么目前的最佳选择是壁球。但是有一个问题……好吧,实际上有几个问题。具体来说:
- SquashFS 相对较新,并且不像 之类的工具那样受到广泛支持
tar
。 - 目前有两种磁盘格式,由两种不同版本的工具生成,彼此不兼容。请确保您获取正确的格式。
- 没有 FUSE 驱动程序——您需要内核支持您的 squashfs 版本才能挂载图像。
- 支持工具(
mksquashfs
和unsquashfs
)相当简单并且不支持您所看到的广泛的选项tar
。 - 没有太多的文献资料。
答案3
主要问题似乎是
... 要查看该档案... 必须先解压整个 5GB!(或者使用档案查看器打开时显示为这样...)
确实需要解压缩,但这并不意味着需要将所有文件“解压”到文件系统中。
要提取一个或多个文件,tar
将解压整个档案,但会丢弃除参数中列出的文件之外的所有内容。
类似地,使用-t
( --list
) 列出文件名需要解压整个档案,但会丢弃所有文件内容。
要理解为什么档案开头没有索引,请考虑一下它tar
最初是为与磁带设备配合使用而设计的;因此得名tar
- 像磁带档案器。在磁带上,您想在末尾添加下一个文件,但不想倒回到开头来写索引。
答案4
您可能需要研究一下 fusecompress,它“提供了一个可安装的 Linux 文件系统,可以透明地压缩其内容。存储在此文件系统中的文件会即时压缩,并且 Fuse 允许在压缩文件和用户应用程序之间创建透明接口。”
对于用户来说,存储的文件可以被访问,就像它们没有被压缩一样。
但是如果你有空间,为什么不直接复制目录树呢?更简单。
另一个选项是将目录树复制到 USB 驱动器。这样可以轻松访问,并可防止磁盘崩溃。