.tar和.tgz有什么区别?

9

我刚刚正在为电子邮件提交存档作业,被教师要求使用tar命令并创建.tgz文件进行存档,我使用以下命令行脚本完成了此操作:

tar -cvf filename.tgz {main.cpp other filenames here}

关于归档或其他方面没有问题,但当我试图通过电子邮件发送文件时,Gmail 阻止了我,称我的文件包含一个可执行文件(我猜测是 main.cpp?),出于安全原因不允许这样做。

所以,我运行了同样的脚本,但这次创建了一个 .tar 文件,如下所示:

tar -cvf filename.tar {main.cpp filenames here}

再次强调,存档没有问题,但现在Gmail允许我通过电子邮件发送存档。那么区别是什么?我只是用tar来实现这个目的,所以我不太熟悉不同的扩展名用于什么。显然,我已经找到了满足需求的方法,但像所有的改进者一样,我很好奇。

你怎么看?


嗯,在阅读了这篇文章之后,似乎Gmail支持.tgz文件,但在您的情况下,.tgz文件未经压缩。我猜测Gmail试图解压缩它,失败了,并决定采取安全措施来阻止该文件。 - gatto
1个回答

16

完全没有区别。文件名只是文件名。通常,当您使用tgz形式时,它表示您已经压缩了tar文件(作为第二步或使用z标志):

tar zcvf filename.tgz {filenames}
或者
tar cvf filename {filenames}
gzip -S .tgz filename

.tar,另一方面,通常意味着“这是一个未压缩的 tar 文件”:

tar cvf filename.tar {filenames}

大多数现代tar实现也支持使用j标志来使用bzip2压缩,因此您也可以使用:

tar jcvf filename.tar.bz2 {filenames}

为了更清楚地说明,在Linux中,文件扩展名在操作系统级别上没有任何影响。扩展名仅在应用程序级别(例如vim)或人类约定中使用。在操作系统级别上使用.tar技术上没有影响,但对于试图处理该文件的人来说可能会产生困惑。 - Swiss
1
+1 @Swiss。这就是为什么file(1)存在的原因。 - Carl Norum
我建议不要使用bzip。生成的压缩文件稍微小一些(约10%),但是运行时间需要10到100倍的时间。由于节省的空间很少,不值得付出时间上的牺牲。 - Swiss
@Swiss 听起来很合理,谢谢你的见解。 - wvm2008
1
@Swiss也被称为zip炸弹 - Matthias
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接