1.11 压缩与解压
我想“压缩文件”这件事你并不陌生。
在 Windows 里,很多同学最熟悉的是:
ziprar
但在 Linux 里,更常见的是:
tartar.gztar.xz
这里先说一个很重要的点:
tar 严格来说最早不是“压缩工具”,而是“打包工具”。
你可以先把它理解成:
- 先把很多文件和目录打成一个包
- 再选择要不要顺手压缩
所以你以后看到:
.tar.tar.gz.tgz
不要把它们完全当成和 Windows 里单纯的压缩包一模一样的概念。
它们往往带着“先打包,再压缩”的思路。
在科研环境里,tar 很常见,因为我们经常会遇到这些场景:
- 一个结果目录里有很多文件,要整体打包
- 需要把整个计算目录传到别的服务器或发给别人
- 下载到一个源码包,需要先解压再编译
- 备份老结果,减少零散文件数量
1. 最小用法
最常见的两条命令是:
bash
tar -czvf dir.tar.gz dir # 将目录压缩成 tar.gz
tar -xzvf dir.tar.gz # 解压 tar.gz 文件如果你现在完全是新手,先把这两条记住就够了。
2. tar 详细用法
很多同学一开始会觉得 tar -czvf 这种写法很像一串咒语。
其实它只是把几个参数连着写在一起。
bash
tar -czvf dir.tar.gz dir这里可以拆成:
c= create,创建一个新包z= gzip,打包后顺手用 gzip 压缩v= verbose,显示处理过程f= file,后面要跟输出文件名
所以这条命令整体可以先理解成:
把
dir打包,并且用 gzip 压缩,输出成dir.tar.gz,同时把过程打印出来。
对应地:
bash
tar -xzvf dir.tar.gz可以拆成:
x= extract,解包z= gzip,说明这是一个 gzip 压缩过的包v= verbose,显示解压过程f= file,后面跟输入文件名
也就是:
把
dir.tar.gz解开,并把过程打印出来。
4. 最常见的几个变体
只打包,不压缩
bash
tar -cvf results.tar results/ # 只打包,不做 gzip 压缩这时生成的是 .tar,不是 .tar.gz。
指定解压目录
bash
tar -xzvf results.tar.gz -C /path/to/target # 解压到指定目录这里的:
-C= change directory
可以先理解成“先切到这个目录,再把包解开”。
先看看包里有什么
bash
tar -tvf results.tar.gz # 查看包里包含哪些文件这里的:
t= list
很适合在你不确定包里内容时先看一眼。
3. zip 和 unzip
虽然 Linux 里 tar 很常见,但 zip 也并不是不能用。
如果你和 Windows 用户频繁交换文件,或者希望对方双击就能解压,zip 反而更通用。
最常见的最小用法是:
bash
zip -r results.zip results/ # 递归压缩目录
unzip results.zip # 解压 zip 文件这里的:
zip:创建 zip 压缩包unzip:解压 zip 压缩包-r:递归压缩目录
你可以先这样理解:
tar:Linux / 服务器 / 源码包 / 目录打包场景很常见zip:跨平台交流更方便,Windows 用户通常更熟悉