tar czf somename.tar some_*_files 是错误的吗?

tar czf somename.tar some_*_files 是错误的吗?

tar czf somname.tar some_*_files那么tar czf somname.tar.gz some_*_files,当然,这样做是错误的吗tar xf somename.tar?即:不添加.gz扩展名。

这个问题纯粹是关于不.gz向文件名添加扩展名somename.tar以及这是否会带来任何意外的副作用。 这个问题不是关于 的使用-z

答案1

您可以将 tarball 命名为任何您喜欢的名称。例如,

tar czvf surprise.c /etc/hosts 2>/dev/null

file surprise.c
surprise.c: gzip compressed data, from Unix, original size modulo 2^32 10240

您可能会发现 GUI 期望此类文件以.tar.gz或为后缀.tgz,如果我正在寻找压缩的 tarball,我会期望它具有这两个后缀之一,但系统本身并不担心。

结论?使用常规后缀提供有关文件内容的信息提示。在 的情况下tar,用于.tar未压缩的存档,或.tgz用于.tar.gz压缩gzip的存档。

答案2

省略.gz文件名末尾的 不会阻止tar cz命令以压缩形式写入输出文件,也不会阻止大多数 GNUtar x命令自动检测输入文件是否已压缩并将其解压缩。即,计算机不需要您.gz在文件名末尾添加 来知道如何使用该文件。

因此,您的问题归结为您如何与其他人就文件内容进行沟通。他们可能会因.gz文件名中缺少 而感到困惑,并用它做错误的事情。 (有时,如果创建文件和解压文件之间经过了几个月,那些“其他人”可能会被

如果其他人看到该.gz.知道该文件已压缩,然后将其包含在内。如果不是很重要,那么你可以省略它。

答案3

至少对于GNU tar(这是我唯一tar熟悉的)只要指定压缩选项我认为当您使用 提取时扩展名并不重要tar xf
让我们省略第二个扩展(xz):

tar cJf archive.tar  pic*.jpg
file archive.tar
archive.tar:XZ压缩数据,校验和CRC64

和第一个 ( tar):

tar cJf archive  pic*.jpg
file archive
存档:XZ 压缩数据,校验和 CRC64

让我们使用jpg扩展:

tar cJf archive.jpg  pic*.jpg
file archive.jpg
archive.jpg:XZ压缩数据,校验和CRC64

让我们使用tar.gz扩展,但仍然使用以下命令进行压缩xz

tar cJf archive.tar.gz  pic*.jpg
file archive.tar.gz 
archive.tar.gz:XZ压缩数据,校验和CRC64

正如您所看到的,在所有情况下,无论存档的名称如何,tar都正确存档和压缩文件(带有)。xz如果您使用...,扩展确实会有所不同,--auto-compress即如果您提供受支持的扩展,它将使用正确的压缩器

tar caf archive.tar.xz  pic*.jpg
file archive.tar.xz
archive.tar.xz:XZ压缩数据,校验和CRC64

而如果它无法识别扩展名(或者如果您使用tar),它将创建一个未压缩的tar存档:

tar caf archive.bag pic*.jpg
file archive.bag 
archive.bag:POSIX tar 存档 (GNU)

无论如何,在所有情况下,tar xf都会提取文件,如手册所述:

读取压缩档案甚至更简单:您不需要指定任何其他选项,因为 GNU tar 会自动识别其格式。因此,以下命令将列出并提取在上一个示例中创建的存档:

# List the compressed archive
$ tar tf archive.tar.gz
# Extract the compressed archive
$ tar xf archive.tar.gz

格式识别算法基于签名,文件开头的特殊字节序列,特定于某些压缩格式...如果此方法失败,tar 会回退到使用存档名称后缀来确定其格式(请参阅自动compress,获取可识别后缀的列表)。

不使用扩展是个好习惯吗?不。正如其他人所说,这里的主要目标是清晰度。

相关内容