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

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

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

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

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

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

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

8642 次点击
所在节点    程序员
50 条回复
EngAPI
2023-01-19 12:08:48 +08:00
zip 有时候编码会有问题
xtreme1
2023-01-19 12:09:18 +08:00
tar 能保留 unix 文件属性(uid/gid/权限)
ggp1ot2
2023-01-19 12:10:59 +08:00
因为很多软件包和库都是用的 tar ,但是 tar 貌似没有压缩,只是打包,文件大小比 zip 要大,为啥都要用 tar 呢? zip 又能压缩文件,生成的压缩包还更小,不应该是更好吗?
thinkershare
2023-01-19 12:12:24 +08:00
看是否需要保留文件在文件系统上那堆附加标记,如果纯粹只需要保存文件内容和文件夹结构,选择一个压缩率搞得的就行,我长期需要在 Win/Mac/Linux 交换文件,zip 文件在资源管理器可以不解压查看,所以 ZIP 还是用的最多。
thinkershare
2023-01-19 12:12:58 +08:00
@ggp1ot2 tar 和 gz 是可以混合在一起的嘛,完成打包和压缩工作。
Xusually
2023-01-19 12:13:03 +08:00
tar 只是一个归档工具 gz 使用 gnuzip 给 tar 归档加上了压缩
gz 是 zip (默认 deflate )的 gnu 实现 gnuzip->gz
所以 gnu/linux 默认用 gz 很正常
lrigi
2023-01-19 12:13:34 +08:00
Tar 解压压缩命令完全记不住,还是 zip 好
ggp1ot2
2023-01-19 12:16:34 +08:00
@lrigi #7 是的,从我刚搜这个命令来看,zip 简单好记,但是我见到的大多数教程以及自己的经验,发现 tar 用的更多,所以有点疑问
ggp1ot2
2023-01-19 12:16:57 +08:00
@Xusually #6 谢谢,有点懂了
libook
2023-01-19 12:29:49 +08:00
tar 是归档,zip 是压缩。
归档就是不进行压缩,只是将多个文件目录打包到一个文件里。
压缩通常会包括归档(但不一定是 tar 的方式),并在此基础上使用压缩算法来减小最终包文件的大小。

一般不会只使用 tar ,而是在 tar 打包后再使用压缩算法进行压缩。tar 的指令工具原生支持 gzip 、bzip2 、compress 、lzip 、lzma 、lzop 、xz 。其实如果接受用两条指令的话,你可以先 tar 然后用任何压缩方式再压缩打包好的 tar 文件,比如 zip 和 7z 。

现在大多使用 tar 是因为 tar 对 Linux/Unix 文件系统更友好,可以保留所有文件系统信息,而 zip 基本之针对 MSDOS 文件系统进行了支持。比如很多 Linux 开源软件的发行,都是需要打包很多文件,同时需要保留这些文件的权限标识,一些文件对所有用户可读、一些文件仅对 root 用户可读,还有一些文件需要可执行权限。当然,在你不需要保留文件系统信息的情况下,使用 zip 也没有问题。
julyclyde
2023-01-19 12:33:35 +08:00
tar 还有个问题就是:不带文件列表,而是用链表串起来的。随机访问会比较麻烦
zip 在末尾有个文件列表
ggp1ot2
2023-01-19 12:37:50 +08:00
@libook #10 了解了,非常感谢 🙋
hefish
2023-01-19 12:39:00 +08:00
tar 只打包不压缩。
zip 能压缩也能打包。
nightwitch
2023-01-19 12:43:25 +08:00
歪个楼:
针对记不住 Linux 各种压缩格式的解压方式的,建议用这个脚本放 bashrc 里
https://gist.github.com/crazyhottommy/4115e40a7ba328c771fea0f83992dc30

@lrigi @ggp1ot2
DeltaC
2023-01-19 13:19:57 +08:00
拒绝 zip ,跨平台文件名乱码真要命
Jirajine
2023-01-19 13:20:07 +08:00
@lrigi 之前在某 linux 群里看到的一个记法:
tar -xzf <压缩包> 参数缩写肖战粉
创建就是把 x(extract) 换成 c(create),后面再跟目录。
当然更方便的是直接用 unar 这样的简化工具或查 tldr 。
makelove
2023-01-19 13:24:34 +08:00
tar 怎么就不能压缩了,一堆的压缩参数,可以选不同的格式,有些比 zip 压缩性能好得多

不过和 zip 不同的是 tar 是整体压缩,无法单独定位解开其中的一个文件。
nuII
2023-01-19 13:43:23 +08:00
`tar -cavf xxx.tar.xx xxx
ddonano
2023-01-19 13:54:45 +08:00
@Jirajine 肖战粉,学到了
limbo0
2023-01-19 14:01:26 +08:00
@lrigi #7
- [c]reate a g[z]ipped archive and write it to a [f]ile:
tar czf target.tar.gz file1 file2 file3
- E[x]tract a (compressed) archive [f]ile into the current directory [v]erbosely:
tar xvf source.tar[.gz|.bz2|.xz]

英文比较好记点

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

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

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

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

© 2021 V2EX