最近,我一直在备份很多数据,我注意到我可以将文件另存为.gz.tar.gz.7z.tar.7z等。普通版本和.tar.*版本之间有什么区别?建议在备份时选择哪一个?

#1 楼

如果您来自Windows背景,则可能熟悉zip和rar格式。这些是压缩在一起的多个文件的存档。
在Unix和类似Unix的系统(例如Ubuntu)中,归档和压缩是分开的。


tar将多个文件放到一个文件中(tar)文件。

gzip压缩一个文件(仅)。

因此,要获得压缩的归档文件,请将两者合并,首先使用tarpax来获取所有压缩文件文件分成一个文件(archive.tar),然后由gziparchive.tar.gz)。
如果只有一个文件,则需要压缩(notes.txt):不需要tar,因此只需执行gzip notes.txt,结果notes.txt.gz。还有其他压缩类型,例如compressbzip2xz,其工作方式与gzip相同(当然,除了使用不同类型的压缩外)。

评论


那是有道理的,但是,为什么为什么我可以从多个文件中创建一个.7z档案,而我又可以从多个文件中创建一个.tar.7z档案呢?

– Exeleration-G
2012年4月15日的1:46

@ Exeleration-G 7zip不遵循此方案。它更像zip和rar。不知道将tar与7zip结合使用的意义是什么,因为我自己还没有使用过7zip。

– Geirha
2012年4月15日在1:53



@ Exeleration-G阅读完其他答案后,我看到SaultDon回答了该问题; 7zip不存储已归档文件的unix所有权和权限(似乎主要针对Windows,例如zip和rar),因此将其与tar结合使用以保留所有权和权限是有意义的。

– Geirha
2012年4月15日在2:02

以我的经验,7z在压缩方面比zip更好。当我测试时,它为我节省了40%的额外费用

– Eoin
18-2-9在11:51

@Eoin Yep。但是缺点是其他计算机不太可能支持它,而且速度很慢。

–theX
20'八月20'23:17



#2 楼

这取决于您要寻找的内容。压缩还是存档?

当我谈论存档时,我的意思是保留权限,目录结构等...

压缩可能会忽略其中的大部分内容,而只是将文件放在较小的软件包中。

要保留文件权限,请使用tar:

tar cpvf backup.tar folder


p标记将保存文件权限。
使用z标记进行gzip压缩或使用j标记进行bzip压缩。

tar czpvf backup.tar.gz folder #backup.tgz is acceptable as well
tar cjpvf backup.tar.bz2 folder #backup.tbz2 works too


如果要拥有tar文件您可以使用P标志“更新”打包tar:

tar cpPvf backup.tar folder


然后进行更新,将'c'替换为'u',并且在拆包时可以使用' k'保留已存在的文件。

tar upPvf backup.tar folder #updating a tar file
tar xpPkvf backup.tar #extracting a tar with permissions(p) and not extracting(k) files that exist on disk already


P标志保存具有完整路径的文件,因此-/ home / username vs home / username(注意前瞻斜杠)。

7z压缩可提供更大的压缩率,但不会保留文件所有权,权限等。Rzip是另一个压缩器。 ession实用程序也可提供与7z相当的压缩效果。

我想backup.tar.7z文件只是由7z文件压缩的​​tar文件(具有权限),尽管我不会对此感到惊讶如果由于7z可能无法转储文件元数据而发生的压缩很少。 7z可以排除文件元数据,因此可以提供出色的压缩能力(当然还有其他事情)。

压缩也完全取决于数据类型。某些文件无法很好地进行压缩,因为它们可能已经通过其他方式进行了压缩(例如.mp3,.jpg,.tiff /带有lzma,.rpm等)。

#3 楼

gzip或bzip2不了解file system-文件名,目录或树结构。它只是压缩输入流,然后输出结果。甚至gzip或bzip2也无法单独归档目录,这就是为什么它通常与tar结合使用的原因。 gzip,bzip2(compressor) )-只是压缩输入。

我认为这种策略来自“做好一件事” Unix哲学。焦油效果很好?保持原样。需要比gzip更多的压缩率吗?这是bzip2或7zip。

评论


实际上7zip可以像zip或rar一样存档。

–维护
2012年4月15日下午4:56

#4 楼

由于压缩方式不同,因此tar本身只是被存档(几乎没有压缩)。 tar.gz是tar归档文件,但是内容通过gzip(中等压缩)压缩,因此.gz和tar.7z使用7zip压缩(通常是超高压缩)。

备份时,我建议tar.7z,因为它具有最高的压缩率,可以节省您的空间,但要使用额外的程序(7zip)。 .tar.gz将是较大的文件,并且可以完成相同的工作,您也可以使用bzip(.tar.bz / bz2),尽管我不确定是否更适合您,因为我使用gzip或7zip

#5 楼

通常,*。tar文件只是由tar程序创建的tar文件,*。gz程序由gzip创建,*。tar.gz(有时也* .tgz)是gzip压缩的tar文件,而* .7z是由7zip创建的。

但是,在Linux / Unix中,几乎可以随意命名文件,因此完全由文件创建者决定。

#6 楼

传统上,Tar(Tape Archiver)被用作Unix / Linux中的容器来打包文件以供移动。它打包文件结构并维护文件属性,但不压缩文件。

压缩程序压缩文件以使其更小,但它们可能无法处理多个文件,并且/或者无法处理Linux所需的文件属性。由于tar已经存在并且得到了良好的支持,因此无需归档程序来复制此功能,该功能是特定于平台的(对于Windows和Linux,则有所不同)。另外,不同的压缩程序可能对不同类型的文件执行不同的操作,因此最好选择多个压缩文件。

#7 楼

其他答案也解释了压缩和归档之间的区别。

7z是一个存档程序,这意味着它知道内部目录结构,文件名等,而无需解压缩所有内容。但是,有一些限制。我在Ubuntu系统上引用了man 7z

Backup and limitations
       DO NOT USE the 7-zip format for backup purpose on Linux/Unix because :
        - 7-zip does not store the owner/group of the file.

       On Linux/Unix, in order to backup directories you must use tar :
        - to backup a directory  : tar cf - directory | 7za a -si directory.tar.7z
        - to restore your backup : 7za x -so directory.tar.7z | tar xf -

       If you want to send files and directories (not the owner of file) to others Unix/MacOS/Windows users, you can use the 7-zip format.

         example : 7za a directory.7z  directory

       Do not use "-r" because this flag does not do what you think.

       Do not use directory/* because of ".*" files (example : "directory/*" does not match "directory/.profile")


有。可以在tar内使用7z(导致directory.tar.7z)来确保您保留了所有特殊的Linux好东西。但是,7z只会知道其中的一个tar文件,并且必须解压缩并读取整个tar文件才能发现其中的内容。因此,对于一堆普通文件而言,所有权无关紧要,只需直接使用7z。

此外,如果tar文件(或压缩的tar.anything文件)损坏,您将最多只能恢复您的数据直至受伤。使用7z之类的归档文件(不使用tar内部文件),您恢复更多文件的机会会更好。

PS:7z还可以创建可靠的归档文件,从而产生更好的压缩效果,但存在相同的局限性在任何压缩机内使用焦油。资料来源:https://en.wikipedia.org/wiki/Solid_compression