问题:下午在测试环境打包的时候发现不会连带路径打包造成了诸多不便,现对linux下关于打包、压缩的命令、参数及一些注意事项进行总结。
在阐述打包压缩命令参数之前先说一个概念,希望大家不要混淆:打包就是把一大堆鸡蛋(文件)放到一个篮子里;而压缩是把鸡蛋都捏爆挤压(bushi)
在Linux系统中,打包压缩文件是一种常见的操作,它可以节省存储空间并方便地传输文件。下面是一些常用的打包压缩命令及其参数:
-c --ccreate 创建压缩文件
-x --extract 解开压缩文件
-v 显示命令的执行过程
-t --list 列出压缩包中的文件列表
-r --append 将文件追加到压缩包中
-z 用 gzip 格式压缩或解压
-j 用 bzip2 格式压缩或解压
-f 目标文件名 #-f后面一定要接文件名否则会报错
-C 解压包中所有文件到指定目录
实操起来:
-
在当前目录下打包并使用gzip压缩,如果想在其他目录下进行打包压缩带上路径即可
tar -zcvf transmit.tar.gz up.log down.log
-
追加文件到tar包中
tar -rvf transmit.tar 123.log
-
连带路径打包,非常实用
解压这个文件时会保持原有的目录结构,即在解压的位置重建test目录,并在test目录下放置up.log和down.log两个文件。
那么在解压的位置已经存在test目录会怎么办呢?如果有up.log和down.log两个同名文件解压过程中会被解压出来的文件所覆盖,否则会被解压出来的文件合并。
连带路径打包这个场景相信大家也看到了,非常适合代码版本包的打包方式,更适合程序猿宝宝体质的打包方式。
cd .. #返回需要打包的上一级目录
tar -cvf transmit.tar test/up.log test/down.log
#注意这里需要打包的文件目录不能带上/否则会报错
-
查看压缩包内容
tar -tf transmit.tar.gz
-
将压缩包解压到指定目录
tar -zxvf transmit.tar.gz -C /path/to/directory
如果打包后使用bzip2压缩或者解压呢-讲究一个换汤不换药:
压缩:tar jcvf transmit.tar.bz2 up.log
解压缩:tar jxvf transmit.tar.bz2
上面的参数写了用gzip和bzip2进行压缩或者解压,那么他们具体是怎么进行压缩或者解压的呢,又是否存在其他方式压缩或者解压呢?我想是有的:
gzip:广泛使用的压缩程序,通常用于压缩单个文件
压缩(不是hasaki):gzip up.log
#默认情况下,gzip会将原文件压缩后删除原文件,只保留.gz后缀的压缩文件
解压缩:gzip -d up.log.gz
那这时候有观众老爷要问了,我就是要保留原始文件怎么搞:
压缩的时候保留原始文件:gzip -k up.log #-k(keep)保留原始文件
解压的时候保留原始文件:gzip -d -c up.log.gz > filename
#即使用>来将输出重定向到一个新文件中,这样.gz文件得到保留,同时也得到了解压缩 文件
bzip2:提供比gzip更高的压缩率,但压缩和解压速度较慢
压缩:bzip2 up.log #bzip2默认会删除原文件
解压缩:bzip2 -d up.log.bz2
zip
压缩:zip -r up.log.zip /path/to/directory #-r递归压缩目录
解压缩:unzip up.log.zi
xz:提供高压缩率的压缩工具
压缩:xz up.log
解压缩:xz -d up.log.xz
7z:支持多种压缩算法的压缩程序
压缩:7z a up.log.7z /path/to/directory
解压缩:7z x up.log.7z
zstd:Facebook开发的压缩算法和工具,提供高压缩比的同时保持很高的压缩和解压速度
压缩:zstd up.log
解压缩:zstd -d up.log.zst
又有观众老爷要问了:这么多压缩方式就不能统一一下吗?当然答案是目前不能,他们都有各自的优点和适合的场景。你总不能说现在生活慢慢的变好了就舍弃馒头这种较为朴素的食物吧,当然期待你发明一种可以综合以上所有压缩工具优点的万能工具,未来谁说得准呢~也免得我们面对一大堆的压缩工具还要记命令
扯远了我们继续话回正题:可以根据需求来选压缩工具:如果你需要快速压缩和解压缩,可能会选择lzop或gzip;如果你需要更高的压缩率,可能会选择xz或bzip2。而tar则是一个非常灵活的工具,可以与多种压缩工具配合使用,以达到既打包又压缩文件的目的。