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

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

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

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

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

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

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

8071 次点击
所在节点    程序员
50 条回复
wonderfulcxm
2023-01-19 14:17:49 +08:00
正好我最近用这俩,zip 的参数可以直接加密码,tar 得借助第三方工具比如 openssl 。
duke807
2023-01-19 14:26:20 +08:00
嫌命令不好记的估计都是平时不用 linux 做主系统的,然后还看了一些垃圾中文教程

linux 下解压任何 tar 压缩包,都是这样就行
tar xf xxx.tar.bz2

xf 不用写成 -xf ,更不用加更多字母

压缩则是:
tar caf xxx.tar.xz xxx/

a 表示根据文件名,自动选择对应压缩算法
shijingshijing
2023-01-19 14:44:37 +08:00
zip 岂止是文件名,对于路径特别深的,而且有一两个文件夹名字特别长或者有特殊字符的,几乎是灾难。可以试着压缩 /解压缩 npm 。。。
bao3
2023-01-19 15:18:34 +08:00
上面的回复太长了。一个简单的区别

tar 是打包,不带压缩,就像你桌上的文件袋,只是装文件而不压缩文件。

zip 是英文“拉链”的引申过来,它是压缩为主。比如你穿了衣服,不拉链,衣服敞开着,可能比较占地方,特别是冬天的衣服。但是如果你 zip 一下,拉上拉链,衣服就会更修身,占得空间就小。


有人会说,tar 也可以产生 tar.gz 的压缩档啊,是的,但整个工作流程是先 tar ,然后 tar 通过 z 参数调用了 gzip ,对打包的 tar 档案进行 zip ,最终生成 tar.zip.

这两者的区别是 zip 要消耗过多的资源,但 tar 因为不压缩,所以以看作是简单的复制粘贴过程。
lrigi
2023-01-19 15:31:32 +08:00
@nightwitch 这个脚本有点牛,谢谢已经保存了。每次我都是一边吐槽“你为什么要用 tar.gz/tar 压缩这么麻烦”一边搜怎么解压缩。
billlee
2023-01-19 15:47:42 +08:00
哪个好用纯粹是习惯问题吧,我就觉得 zip 的命令参数总是记不住。不过现在 bsdtar 可以直接用 -xf 解压 zip, 方便多了
lrigi
2023-01-19 15:48:55 +08:00
@Jirajine
@limbo0
看了各位的回复说实话我更迷惑了,比如肖战粉“xzf”是解压,第二个兄弟为什么又变成了“xvf”,我搜了下 v 是显示解压的全过程,但搜出来的结果告诉我应该用“xzvf”???
是不是这样的:
我理解 tar 因为没有压缩( z ),所以用 x(v)f ?
然后 tar.gz 有压缩( z ),用 xz(v)f
但第二个兄弟的回复“ tar xvf source.tar[.gz|.bz2|.xz]” 看起来 xvf 也能解压缩 tar.gz ?
Seanfuck
2023-01-19 15:54:06 +08:00
tar -z 参数不就是压缩吗?
duke807
2023-01-19 15:55:56 +08:00
@lrigi #27 看我 #22 楼回复
BrokenVns
2023-01-19 16:19:02 +08:00
补充下,zip 跨平台导致各个平台的 zip 工具在实现是有差别的,比如对软链接文件的支持和实现都是不同的。
你用工具 A 压缩的软链接文件用工具 B 可能会解压失败。
原因是 A 的实现方式是把链接地址作为内容存储在数据域,而 B 的的实现方式是把软链接地址存储在额外数据域里。
limbo0
2023-01-19 17:30:16 +08:00
@lrigi #27
man tar 手册里
-z, --gunzip, --gzip
(c mode only) Compress the resulting archive with gzip(1). In extract or list modes, this option is ignored. Note that this tar implementation recognizes gzip compression automatically when reading archives.

-z 参数解压过程不用加, 程序会自动判断文件的格式进行处理

压缩过程还是需要加上的, 可以试试如果不加就变成 POSIX tar archive 文件,其实就是归档成一个文件了,并没有压缩空间
lc1450
2023-01-19 17:30:19 +08:00
@lrigi 并不是, 解压用 xf 就行. x 表示解压, 会根据文件名识别压缩算法, 所以 z 可以省略, f 接文件, 想看详细过程加参数 v
之前不知道,每次都查, 后来才发现的, 网上的教程大多都是到处复制, 会有一些偏差
Jirajine
2023-01-19 17:34:47 +08:00
@lrigi 肖战粉只是个记法,记住之后看一下缩写,v(verbose) f(file) z(zip),哪些可加可不加和对应效果都很好理解。
wgq2633
2023-01-19 18:12:22 +08:00
@ggp1ot2 长期用的三组参数,
-zxvf 解压 gz 压缩的 tar 包,-zcvf 创建,-ztvf 列出包内容

其中的 z 参数 gz, 改用 j 是 bzip2, 改用 J 是 xz 格式,
三种参数,三个变体,可以满足我的日常需求了
Bingchunmoli
2023-01-19 18:19:40 +08:00
学到了,刚开始有文档看后来用多了就记住一个 xzvf 其他都百度查,主要还是 zip 基础操作简单喜欢 tar 参数多了还没中文汉化的 help
webcape233
2023-01-19 18:34:32 +08:00
tar -cJvf xx.tar.xz your-dir
tar -xJvf xx.tar.xz
lambdaq
2023-01-19 20:56:00 +08:00
我的意见是能 gz 就 gz 。。。。unzip 有些发行版默认没安装。。。。
rocmax
2023-01-19 21:13:09 +08:00
zip 的文件信息存在尾部,无法使用流式处理
adoal
2023-01-19 21:15:56 +08:00
你对 Linux 的文件权限 ugo rwx 这一套有概念吗? zip 对这些东西支持不好,tar 可以完整保留。所以如果将来要原样恢复,还是 tar 了再压缩好。

另外,tar+gz/bz2/xz 这种先打包再压缩的方式可以类比于 rar/7z 里的“固实压缩”,而 zip 是先压缩单个文件再打包,类似 rar/7z 的默认压缩。
kenvix
2023-01-19 21:18:55 +08:00
tar 没有目录结构,zip 没有编码规范。建议 7z 。

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

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

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

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

© 2021 V2EX