问题描述
最近,我一直在备份大量数据,并且我注意到可以将文件另存为.gz
或.tar.gz
,或.7z
和.tar.7z
等。正常的和.tar.*
变体之间有什么区别?在制作备份时,他们中的哪一位会被告知?
最佳解决办法
如果您来自Windows背景,则可能熟悉zip和rar格式。这些是压缩在一起的多个文件的档案。
在Unix和Unix-like系统(如Ubuntu)中,归档和压缩是分开的。
tar
将多个文件放入一个(tar)文件中。
gzip
压缩一个文件(仅)。
因此,为了获得一个压缩的压缩文档,您可以将两者合并,首先使用tar
或pax
将所有文件合并到一个文件(archive.tar),然后使用gzip
它(archive.tar.gz)。如果只有一个文件需要压缩(notes.txt),则不需要tar,因此您只需执行gzip notes.txt
即可生成notes.txt.gz
。还有其他类型的压缩,例如compress
,bzip2
和xz
,其工作方式与gzip相同(除了使用不同类型的压缩技术之外)
次佳解决办法
这取决于你在找什么……压缩或存档?
当我谈论归档时,我的意思是保留权限,目录结构等。
压缩可能会忽略大部分内容,只是将文件放在较小的包中。
要保留文件权限,请使用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:”update”:
tar cpPvf backup.tar folder
然后进行更新,用’u’替换’c’,并且在解包时,可以使用’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是另一种压缩实用程序,它也提供与7z相当的压缩。
我猜想backup.tar.7z文件只是一个压缩7z文件的tar文件(有权限),但如果压缩出现小问题,我不会感到惊讶,因为7z可能无法转储文件元数据。 It’s 7z’s排除文件元数据的能力,它可以提供很好的压缩(当然还有其他的东西)。
压缩也完全依赖于数据类型。某些文件压缩不好,因为它们可能已经被其他方式压缩(即.mp3,.jpg,.tiff /with lzma,.rpm等)。
第三种解决办法
gzip或bzip2不知道file system
– 文件名,目录,树形结构。只是压缩输入流,然后输出结果。即使gzip或bzip2也不能将目录独立存档。这就是为什么结合焦油。
tar(存档) – 只是档案文件结构。 gzip,bzip2(压缩器) – 只是压缩输入。
我认为这个策略来自‘do one thing well’ unix哲学。焦油效果很好?离开它。需要比gzip更多的压缩比率?这里是bzip2或7zip。
第四种办法
它不同的压缩方式,tar本身就被简单归档(很少压缩或不压缩)。 tar.gz是一个tar档案,但内容由gzip(中等压缩)压缩,因此.gz和tar.7z使用7zip压缩(通常是超高压缩)
备份时我会推荐tar.7z,因为它具有最高的压缩率,节省了空间,但使用了额外的程序(7zip)。 .tar.gz将会是更大的文件并且执行相同的工作,您也可以使用bzip(.tar.bz /bz2),尽管我不确定这是否适合您,因为我使用gzip或7zip
第五种办法
通常,* .tar文件只是由tar程序创建的tar文件,* .gz程序由gzip,* .tar.gz(有时也包含* .tgz)为gziped tar文件创建,* .7z由7zip创建。
但是,在Linux /Unix中,无论如何都可以命名文件,因此它完全由文件的创建者决定。
第六种办法
Tar(磁带归档器)传统上被用作Unix /Linux中的一个容器来打包文件以便移动。它打包文件结构并维护文件属性,但不压缩文件。
压缩程序压缩文件使其更小,但它们可能无法处理多个文件,并且/或者它们可能无法处理Linux所需的文件属性。由于tar已经存在并且是well-supported,所以没有理由将程序归档到这个功能上,这是platform-specific(对于Windows和Linux来说是不同的)。而且,不同的压缩程序可能在不同类型的文件上表现不同,因此选择多于一个是合意的。