linux下打包压缩tar,linux下的打包压缩gzip,gunzip,tar

linux下的打包压缩

打包和压缩

gzip 压缩

gzip -[1-9] filename 指定压缩等级

gzip -c filename 输出压缩结果到标准输出

gzip -d filename 解压缩

gzip -k filename 保留原文件

gzip -f filename 强制覆盖同名文件

gzip -l filename 打印压缩信息

gzip -n/N filename 保留源文件信息

gzip -r dir 递归压缩目录下文件

gzip -S {suffix} filename 指定后缀

gzip -t filename 检测文件

gzip -v filename 输出压缩信息

tar 打包/解包

tar -c 打包

tar -x 解包

打包和压缩

首先要弄清两个概念:打包和压缩。

打包是指将一大堆文件或目录变成一个总的文件;

压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。

gzip 压缩

gzip = gun + zip

XYBJM01617:d2 csw$ gzip -h

Apple gzip 272.201.1

usage: gzip [-123456789acdfhklLNnqrtVv] [-S .suffix] [[...]]

-1 --fast fastest (worst) compression 最快(最糟糕)的方式压缩文件

-2 .. -8 set compression level 设置压缩比率

-9 --best best (slowest) compression 最慢(最好)的方式压缩文件

-c --stdout write to stdout, keep original files 把压缩后的内容输出到标准输出,保留原文件

--to-stdout

-d --decompress uncompress files 解压

--uncompress

-f --force force overwriting & compress links 强行压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接;

-h --help display this help 展示帮助信息

-k --keep don't delete input files during operation 保留原始文件

-l --list list compressed file contents 展示压缩文件的信息

-N --name save or restore original file name and time stamp 保存或恢复原文件名称和时间戳

-n --no-name don't save original file name or time stamp 不保存源文件名称和时间戳

-q --quiet output no warnings 不输出waring

-r --recursive recursively compress files in directories 递归压缩目录下的所有文件

-S .suf use suffix .suf instead of .gz 指定压缩文件的后缀

--suffix .suf

-t --test test compressed file 测试文件是否可以压缩

-V --version display program version 展示程序版本

-v --verbose print extra statistics 压缩完打印压缩率等信息

gzip -[1-9] filename 指定压缩等级

指定压缩等级,数字越大,压缩耗费时间越久,压缩率越高。默认是 -6

我们创建三个同样大小的文件,通过不同的等级压缩看看效果

XYBJM01617:d2 csw$ ls -l

total 16994432

-rw-r--r-- 1 csw staff 2896363252 6 8 15:41 f1

-rw-r--r-- 1 csw staff 2896363252 6 8 15:40 f2

-rw-r--r-- 1 csw staff 2896363252 6 8 15:57 f3

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$ gzip -1 f1

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$ gzip -9 f2

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$ gzip f3

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$ ls -l

total 149504

-rw-r--r-- 1 csw staff 41861113 6 8 15:41 f1.gz

-rw-r--r-- 1 csw staff 16850592 6 8 15:40 f2.gz

-rw-r--r-- 1 csw staff 16850592 6 8 15:57 f3.gz

我们可以看到 -9 和 -1 之间的压缩率会相差很多,当然 -1 要比 -9 快很多。至于为什么默认的 -6 和 -9 大小一样,我觉得应该是到了压缩极限。

gzip -c filename 输出压缩结果到标准输出

把压缩后的文件内容直接输出到标准输出。

XYBJM01617:d2 csw$ gzip -c f1 > f1.gz

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$ ls

f1f1.gzf2f3

我们把标准输出重定向到 f1.gz 就生成了压缩文件

gzip -d filename 解压缩

解压缩

XYBJM01617:d2 csw$ gzip -d f1.gz

f1 already exists -- do you wish to overwrite (y or n)? y

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$ ls

f1f2f3

应该等同于gunzip

gzip -k filename 保留原文件

如果不见 -k 默认不会保留原文件,加上之后会保留原文件

XYBJM01617:d2 csw$ gzip -k f1

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$ ls

f1f1.gzf2f3

可以看到f1.gz保留了下来

gzip -f filename 强制覆盖同名文件

如果压缩后的文件名已经存在则会跳过提问环节,直接覆盖

XYBJM01617:d2 csw$ gzip f1

f1.gz already exists -- do you wish to overwrite (y or n)? n

not overwriting

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$ gzip -f f1

XYBJM01617:d2 csw$ ls

f1.gzf2f3

可以看到,如果不指定 -f ,系统会询问是否覆盖。

gzip -l filename 打印压缩信息

展示压缩的详细信息

XYBJM01617:d2 csw$ gzip -l f1.gz

compressed uncompressed ratio uncompressed_name

16850592 2896363252 99.4% f1

从左到右依次是,压缩后文件大小,压缩前大小,压缩率和压缩前文件名称

gzip -n/N filename 保留源文件信息

默认是-N,也就是在压缩文件里会保存原文件的文件名和时间戳信息。-n的话不会保存。

XYBJM01617:d2 csw$ gzip -n f2

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$ gzip f3

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$ ls -l

total 5746432

-rw-r--r-- 1 csw staff 2896363252 6 8 17:52 f1

-rw-r--r-- 1 csw staff 16850589 6 8 15:40 f2.gz

-rw-r--r-- 1 csw staff 16850592 6 8 15:57 f3.gz

我们可以看到 f3.gz 比 f2.gz 多了3个字节,用来保存原文件的信息

gzip -r dir 递归压缩目录下文件

递归压缩目录下的所有文件

XYBJM01617:d1 csw$ gzip -r d2

XYBJM01617:d1 csw$ cd d2

XYBJM01617:d2 csw$ ls

f1.gzf2.gzf3.gzf4.gz

gzip -S {suffix} filename 指定后缀

指定压缩后的文件名后缀

XYBJM01617:d2 csw$ gzip -S .suf f1

XYBJM01617:d2 csw$ ls

f1.suff2.gzf3.gzf4.gz

注意这里的点需要自己加上

gzip -t filename 检测文件

检测指定文件是否是压缩文件

XYBJM01617:d2 csw$ ls

f1.suff2f3.gzf4.gz

XYBJM01617:d2 csw$

XYBJM01617:d2 csw$ gzip -t f1.suf

XYBJM01617:d2 csw$ gzip -t f2

gzip: f2: not in gzip format

XYBJM01617:d2 csw$

可以看到如果不是压缩文会有提示,否则没有输出。有时候压缩文件名没有 .gz 后缀,就可以用 -t 参数检测。

gzip -v filename 输出压缩信息

默认压缩完不会有任何输出,加上 -v(小写) 会在压缩完成后输出压缩信息。

XYBJM01617:d2 csw$ gzip -v f2

f2: 99.4% -- replaced with f2.gz

tar 打包/解包

tar命令可以为linux的文件和目录创建档案。

利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。

tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。

利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

XYBJM01617:gzip csw$ tar -h

tar(bsdtar): manipulate archive files

First option must be a mode specifier:第一个选项必须是模式说明符

-c Create -r Add/Replace -t List -u Update -x Extract

Common Options:

-b # Use # 512-byte records per I/O block

-f Location of archive

-v Verbose

-w Interactive

Create: tar -c [options] [| | @| -C ]

, add these items to archive

-z, -j, -J, --lzma Compress archive with gzip/bzip2/xz/lzma打包的同时压缩

--format {ustar|pax|cpio|shar} Select archive format

--exclude Skip files that match pattern

-C Change to before processing remaining files

@Add entries from to output

List: tar -t [options] []

If specified, list only entries that match

Extract: tar -x [options] []

If specified, extract only entries that match

-k Keep (don't overwrite) existing files不要覆盖存在的文件

-m Don't restore modification times不要恢复修改时间

-O Write entries to stdout, don't restore to disk 将条目写到标准输出,不需要还原到磁盘

-p Restore permissions (including ACLs, owner, file flags) 恢复权限

bsdtar 2.8.3 - libarchive 2.8.3

tar -c 打包

XYBJM01617:gzip csw$ tar -c -v -f d1.tar d1

a d1

a d1/d3

a d1/d2

a d1/d2/f4.gz

a d1/d2/f1.suf

a d1/d2/f2

a d1/d2/f.tar

a d1/d2/f2.gz

a d1/d2/f3.gz

XYBJM01617:gzip csw$ ls

d1d1.tar

可以看到生成了打包文件d1.tar,我们可以用 -t 看下归档文件里的内容

XYBJM01617:gzip csw$ tar -t -f d1.tar

d1/

d1/d3/

d1/d2/

d1/d2/f4.gz

d1/d2/f1.suf

d1/d2/f2

d1/d2/f.tar

d1/d2/f2.gz

d1/d2/f3.gz

那如果我想打包的同时压缩文件呢,只需要用 -z, -j, -J 参数即可指定压缩方式

XYBJM01617:gzip csw$ tar -c -z -v -f d1.tar d1

a d1

a d1/d3

a d1/d2

a d1/d2/f4.gz

a d1/d2/f1.suf

a d1/d2/f2

a d1/d2/f.tar

a d1/d2/f2.gz

a d1/d2/f3.gz

XYBJM01617:gzip csw$ ls

d1d1.tar

XYBJM01617:gzip csw$

XYBJM01617:gzip csw$ gzip -t d1.tar

XYBJM01617:gzip csw$

这时候的 d1.tar 已经是经过压缩之后的文件。这里需要注意的是,系统不会自动加 .zip 后缀,所以建议指定文件名的时候加上 .tar.gz 后缀,方便区分。

tar -x 解包

XYBJM01617:gzip csw$ ls

d1.tar

XYBJM01617:gzip csw$

XYBJM01617:gzip csw$ tar -x -v -f d1.tar

x d1/

x d1/d3/

x d1/d2/

x d1/d2/f4.gz

x d1/d2/f1.suf

x d1/d2/f2

x d1/d2/f.tar

x d1/d2/f2.gz

x d1/d2/f3.gz

XYBJM01617:gzip csw$ ls

d1d1.tar

可以看到 d1 目录被解压了出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值