Linux 下用 tar 和 zip 压缩文件夹有啥区别

2023-01-19 12:06:40 +08:00
 ggp1ot2

需要定时备份一个文件夹,大概 300m ,该文件夹下有多个子文件夹和各种文件。

采用的思路是压缩该文件夹上传到其他地址。

搜了下压缩文件夹的命令,发现大多数教程都推荐的 tar 命令,但是我发现 zip 命令更简单好用啊。

就压缩的结果来看,tar.gz 和.zip 有区别吗?

为什么我会有一种用 tar 命令更高级的感觉?

8738 次点击
所在节点    程序员
50 条回复
msg7086
2023-01-19 21:25:23 +08:00
解压缩不需要指定压缩类型,所以解压缩直接 xf 就行,不需要加 z 或者 J 之类的。
压缩需要指定,但是也可以分两步操作,先 tar 打包,再手动调用 gzip 或者 xz 压缩。
单步操作主要是比较省硬盘空间,但是参数选择比较少。
jim9606
2023-01-19 22:41:46 +08:00
tar 对 POSIX 文件系统元数据支持较好,zip 容器理论上也可以通过扩展支持,但不同软件不一定正确实现了这些扩展。
tar 只归档,gz 只压缩,gzip 是把 tar 作为一个整体进行压缩的(也就是固实),压缩率会好一些,坏处是没法原地修改和部分解压。zip 不支持固实。
zip 也不支持符号链接、硬链接、稀疏文件。

zip 的文件编码问题就是不同实现导致的。此中的吐血事可以看这个,支持了但没完全支持。

https://blog.abysm.org/2016/04/pkzip-filename-mojibake/

其实只要是有不同主流实现就有可能出现兼容性问题,linux 常用 infozip 但 windows 常用 7-zip 套壳。tar 的实现也有 GNU tar 和 bsdtar 两种,有时也会出点问题。
jim9606
2023-01-19 22:53:29 +08:00
另外一点,不怎么喜欢用 zip/unzip 是因为这玩意一般不预装,但 tar 和 gzip/gunzip 一般都是预装的。
冷知识,docker cp (曾经?)依赖容器内的 tar 才能工作,这点约等于要求所有 docker 镜像都得预装 tar 。
至于选项开关 -c[reate] -e[xtract] -f[ile] 基本够用了,压缩方式让 tar 自己猜去。
Tink
2023-01-20 01:06:53 +08:00
tar 不能压缩吧? gzip 可以压缩
wizardyhnr
2023-01-20 01:23:34 +08:00
zip 可以指定 utf8 编码,用 7z -mcu=on 。不支持 solid compression 也不全是缺点,solid compression 一旦文件出现损坏,很难恢复。归档 solid compression 不一定是好的选择。
用于不同平台的分享可以装个 7z ,用脚本定制输出格式,zip/7z ,solid compression/non solid compression ,编码格式,压缩参数
unzip 有-O 的选项处理编码问题。
一般各平台交互打包就用 zip uft8 ,这个兼容性是最好的。其他就用 7z 。Linux 备份用 tar 。
leido
2023-01-20 02:31:20 +08:00
win 上面几乎没有归档不压缩的格式(虽然 zip 可以),所以新手不太容易理解 tar ,但它真的只打包

压缩率(一般情况) xz > 7z > bz2 > zip(gz)
另外还有和 zip 类似的 7z 命令,楼主可以研究
ysc3839
2023-01-20 03:19:08 +08:00
tar 全称是 tape archive ,即是给磁带设计的格式,而磁带的特点是顺序读写,因此 tar 是顺序处理的,因此可以实现边下载边解压 tar ,给 tar 添加文件可以直接添加到末尾,要列出 tar 中所有文件则需要处理完整个 tar ,尤其是 tar 配合其他压缩格式时,需要完整解压一遍才能知道内容。
ysc3839
2023-01-20 03:22:43 +08:00
@lrigi #27 不同的 tar 工具有不同的特性,比如 GNU tar 可以根据文件扩展名自动解压,就不需要加 z 指明压缩格式。v 代表 Verbose ,会输出文件名,个人一般是不加,因为有的时候会影响性能。
lrigi
2023-01-20 10:07:29 +08:00
@duke807 试了下确实是可以的,感谢。
@Jirajine
@limbo0
@lc1450
@ysc3839
完全理解了,上网搜真的搜的不太明白,感谢各位! tar 就像一个多功能工具刀,加上不同的参数就是不同功能,之前还疑惑为什么要加这么长的参数相比 zip -r 和 unzip
ggp1ot2
2023-01-23 19:31:16 +08:00
@lrigi #49 感谢帮忙一一艾特啦,确实,这些东西搜一些乱七八糟的博客讲解,不如 v 友说的明白!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/909851

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX