linux下文件打包及解压缩

本文是关于linux下文件打包和解压缩的学习记录。

windows中常用的压缩格式不外乎zip,rar,7z三种格式,而到了linux除了这三种压缩格式还有很多:gz,xz,bz2,tar,tar.gz,tar.xz,tar.bz2,简单介绍如下:

后缀名 说明
zip zip程序打包压缩的文件
rar rar程序压缩的文件
7z 7zip程序压缩的文件
tar tar程序打包,未压缩的文件
gz gzip程序压缩的文件
xz xz程序压缩的文件
bz2 bzip2程序压缩的文件
tar.gz tar打包,gzip程序压缩的文件
tar.xz tar打包,xz程序压缩的文件
tar.bz2 tar打包,bzip2程序压缩的文件
tar.7z tar打包,7zip程序压缩的文件

不过常用的只是zip,rar和tar命令。

zip压缩打包程序

使用zip打包文件
$ zip -r -q -o test.zip ./test

上面命令将当前目录下的test目录打包压缩成test.zip。

  • -r:表示递归打包目录及目录里的所有内容
  • -q:表示安静模式,不在终端里打印信息
  • -o:表示输出文件,后面需要紧跟打包生成的文件名
查看压缩包信息(大小或其它)
$ du -h test.zip
  • -h:–human-readable
  • -d:–max-depth(查看文件深度)

$ file test.zip
设置压缩级别
$ zip -r -9 -q -o test9.zip ./test -x ./*.zip
  • -[1~9]:1表示最快压缩体积最大,9表示体积最小耗时最长
  • -x:排除文件选项,后面加上文件
加密压缩
$ zip -r -e -o test.zip ./test
  • -e:加密选项
兼容windows换行选项
  • 关于zip命令,因为 Windows 系统与 Linux/Unix 在文本文件格式上的一些兼容问题,比如换行符(为不可见字符),在 Windows 为 CR+LF(Carriage-Return+Line-Feed:回车加换行),而在 Linux/Unix 上为 LF(换行),所以如果在不加处理的情况下,在 Linux 上编辑的文本,在 Windows 系统上打开可能看起来是没有换行的。如果你想让你在 Linux 创建的 zip 压缩文件在 Windows 上解压后没有任何问题,那么你还需要对命令做一些修改,需要加个选项-l,将LF转换为CR+LF
``` bash
$ zip -r -l -o test.zip ./test
```

unzip命令解压缩zip文件

普通解压zip
$ unzip test.zip
带参数解压
$ unzip -q test.zip -d ziptest
  • -q:静默模式,不打印解压信息
  • -d:解压到指定目录,如果目录不存在就新建目录
换行兼容问题
$ unzip -l test.zip
编码问题
  • 使用unzip解压文件时我们同样应该注意兼容问题,不过这里我们关心的不再是上面的问题,而是中文编码的问题,通常 Windows 系统上面创建的压缩文件,如果有有包含中文的文档或以中文作为文件名的文件时默认会采用 GBK 或其它编码,而 Linux 上面默认使用的是 UTF-8 编码,如果不加任何处理,直接解压的话可能会出现中文乱码的问题(有时候它会自动帮你处理),为了解决这个问题,我们可以在解压时指定编码类型。使用-O(英文字母,大写o)参数指定编码类型:
``` bash
$ unzip -O GBK test.zip
```

rar打包压缩命令

rar也是 Windows 上常用的一种压缩文件格式,在 Linux 上可以使用rar和unrar工具分别创建和解压 rar 压缩包。

安装rar和unrar工具
  • ubuntu:
``` bash
$ sudo apt-get update
$ sudo apt-get install rar unrar
```
  • fedora
``` bash
$ sudo dnf update
$ sudo dnf install unrar
```
  • 目前,我只找到了fedora下unrar。
从指定文件或目录创建压缩包或添加文件到压缩包
$ rar a test.rar .
  • 上面的命令使用a参数添加一个目录~到一个归档文件中,如果该文件不存在就会自动创建。
  • 注:rar 的命令参数没有-,如果加上会报错。
从指定压缩包文件中删除某个文件
$ rar d test.rar .zshrc
查看不解压文件
$ rar l test.rar
unrar解压文件
  • 全路径解压:
``` bash
$ unrar x test.rar
```
  • 去掉解压路径
``` bash
$ mkdir tmp
$ unrar e test.rar tmp/
```

tar打包解压工具

在 Linux 上面更常用的是tar工具,tar 原本只是一个打包工具,只是同时还是实现了对 7z,gzip,xz,bzip2 等工具的支持,这些压缩工具本身只能实现对文件或目录(单独压缩目录中的文件)的压缩,没有实现对文件的打包压缩,所以我们也无需再单独去学习其他几个工具,tar 的解压和压缩都是同一个命令,只需参数不同,使用比较方便。

创建一个tar包
$ tar -cf test.tar ~
  • -c:表示创建一个tar包
  • -f:用于指定创建的文件名,注意文件名必须紧跟在-f后面,比如不能写成tar -fc test.tar,可以写成tar -f test.tar -c ~
  • -v:以可视的方式输出打包文件
  • -z:创建gzip压缩文件,如:
``` bash
$ tar -czf test.tar.gz ~
```
  • 注:tar会自动去掉表示绝对路径的/,你也可以使用-P保留绝对路径符。
解压tar文件包
$ mkdir tardir
$ tar -xf test.tar -C tardir
  • -x:解压文件
  • -C:解压到指定目录
  • -t:之查看不解压
  • -p:保留文件属性
  • -h:保留文件链接(符号链接和软链接)
  • -z:解压tar.gz压缩文件(即gzip文件),如:
``` bash
$ tar -xzf test.tar.gz
```

现在我们要使用其他的压缩工具创建或解压相应文件只需要更改一个参数即可:

压缩文件格式 对应解压参数
.tar.gz -z
.tar.xz -J
.tar.bz2 -j

参考

实验楼网站课程-linux基础入门-文件打包与解压缩