解压、压缩、打包
1、针对文件进行解、压缩(4三种方法)
第一种解压与压缩:gzip
gzip命令用来压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处".gz"扩展名。
gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。
Grammar
gzip (选项) (参数)
选项
- -d或--decompress或--uncompress:解开压缩文件;
- -c --stdout --to-stdout 将结果写到标准输出;原文件保持不变。如果有多个输入文件,输出将由一系列独立的压缩文件组成。如果想得到较好的压缩率,在压缩前应将多个文件连在一起。
- --best:此参数的效果和指定"-9"参数相同;(文件压缩到最小,默认是6级别)
- --fast:此参数的效果和指定"-1"参数相同。
- -a或--ascii:使用ASCII文字模式;
- -f或--force:强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
- -h或--help:在线帮助;
- -l或--list:列出压缩文件的相关信息;
- -L或--license:显示版本与版权信息;
- -n或--no-name:压缩文件时,不保存原来的文件名称及时间戳记;
- -N或--name:压缩文件时,保存原来的文件名称及时间戳记;
- -q或--quiet:不显示警告信息;
- -r或--recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
- -S或<压缩字尾字符串>或----suffix<压缩字尾字符串>:更改压缩字尾字符串;
- -t或--test:测试压缩文件是否正确无误;
- -v或--verbose:显示指令执行过程;
- -V或--version:显示版本信息;
- -<压缩效率>:压缩效率是一个介于1~9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高;
参数
文件列表:指定要压缩的文件列表。
Living Example
压缩:gzip 原文件名
# 例如:
gzip network
压缩文件后保存原文件:
gzip -c network > network.gz
直接查看压缩文件的内容:zcat 压缩文件名
# 例如:
zcat network.gz
{width="5.768055555555556in" height="2.659096675415573in"}
解压后默认是不会保存压缩包的:
gzip -d network.gz
或者使用gunzip
进行解压:
gunzip network.gz
解压后保存压缩包:
gzip -c > xx.txt
# ls
xx.txt.gz
# gunzip -c xx.txt.gz > xx.txt
# ls
xx.txt
xx.txt.gz
gzip file1 压缩一个叫做 'file1'的文件
gzip -9 file1 最大程度压缩
第二种解压与压缩方法:bzip2
bzip2命令用于创建和管理(包括解压缩)".bz2"格式的压缩包。我们遇见Linux压缩打包方法有很多种,以下讲解了Linux压缩打包方法中的Linux bzip2命令的多种范例供大家查看,相信大家看完后会有很多收获。
Grammar
bzip2 (选项) (参数)
选项
- -d或--decompress:执行解压缩;
-
-k或--keep:bzip2在压缩或解压缩后,会删除原始文件。若要保留原始文件,请使用此参数;
-
-c或--stdout:将压缩与解压缩的结果送到标准输出;
-
-f或-force:bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖。请使用此参数;
-
-h或--help:在线帮助;
-
-s或--small:降低程序执行时内存的使用量;
-
-t或--test:测试.bz2压缩文件的完整性;
-
-v或--verbose:压缩或解压缩文件时,显示详细的信息;
-
-z或--compress:强制执行压缩;
-
-V或--version:显示版本信息;
-
--repetitive-best:若文件中有重复出现的资料时,可利用此参数提高压缩效果;
-
--repetitive-fast:若文件中有重复出现的资料时,可利用此参数加快执行效果。
参数
文件:指定要压缩的文件。
Living Example
压缩:
bzip2 xxx.txt
解压:
bzip2 -d xxx.txt.bz2
直接查看压缩文件的内容:
bzcat xxx.txt.bzp
第三种方法:zip
Grammar
zip (选项) (参数)
选项
-
-A:调整可执行的自动解压缩文件;
-
-b<工作目录>:指定暂时存放文件的目录;
-
-c:替每个被压缩的文件加上注释;
-
-d:从压缩文件内删除指定的文件;
-
-D:压缩文件内不建立目录名称;
-
-f:此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中;
-
-F:尝试修复已损坏的压缩文件;
-
-g:将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件;
-
-h:在线帮助;
-
-i<范本样式>:只压缩符合条件的文件;
-
-j:只保存文件名称及其内容,而不存放任何目录名称;
-
-J:删除压缩文件前面不必要的数据;
-
-k:使用MS-DOS兼容格式的文件名称;
-
-l:压缩文件时,把LF字符置换成LF+CR字符;
-
-ll:压缩文件时,把LF+cp字符置换成LF字符;
-
-L:显示版权信息;
-
-m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中;
-
-n<字尾字符串>:不压缩具有特定字尾字符串的文件;
-
-o:以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同;
-
-q:不显示指令执行过程;
-
-r:递归处理,将指定目录下的所有文件和子目录一并处理;
-
-S:包含系统和隐藏文件;
-
-t<日期时间>:把压缩文件的日期设成指定的日期;
-
-T:检查备份文件内的每个文件是否正确无误;
-
-u:更换较新的文件到压缩文件内;
-
-v:显示指令执行过程或显示版本信息;
-
-V:保存VMS操作系统的文件属性;
-
-w:在文件名称里假如版本编号,本参数仅在VMS操作系统下有效;
-
-x<范本样式>:压缩时排除符合条件的文件;
-
-X:不保存额外的文件属性;
-
-y:直接保存符号连接,而非该链接所指向的文件,本参数仅在UNIX之类的系统下有效;
-
-z:替压缩文件加上注释;
-
-$
:保存第一个被压缩文件所在磁盘的卷册名称; - -<压缩效率>:压缩效率是一个介于1~9的数值。
问题解决
CentOS7中命令找不到
-Bash: Unzip: Command Not Found
解决方法
yum install -y unzip zip
格式:
zip aa.zip aa.txt
解释:(aa.zip
表示压缩后的文件名,aa.txt
表示原文件的文件名)
压缩:
zip xxx.txt.zip xxx.txt
解压:
unzip xxx.txt.zip
实例:
zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包
压缩效率选择:
zip -9 # 1-9 faster->better
不解压的情况下查看zip文件包含的文件:
zip -sf test.zip
不解压的情况下查看zip文件包含的文件:
zipinfo test.zip
只看一下zip压缩包中包含哪些文件,不进行解压缩
unzip -l test.zip
检查zip文件是否损坏
unzip -t test.zip
将压缩文件test.zip在指定目录tmp下解压缩,如果已有相同的文件存在,要求unzip命令覆盖原先的文件
unzip -o test.zip -d /tmp/
#防止中文乱码,并且只解压后缀为.jar的文件到指定的目录(如果jar是在app.zip里面的二级目录也会把二级目录解压出来)
unzip -O CP936 app*.zip '*.jar' -d /tmp
-j 忽略所以路径路径。不处理压缩文件中原有的目录路径。保存提取出的文件到当前目录
unzip -O CP936 -j app*.zip '*.jar' -d /tmp
第四种:xz
选项S
-d, --decompress, --uncompress
Decompress. #不保留原文件解压
-k, --keep #
Don't delete the input files.
-f, --force
-c, --stdout, --to-stdout
Write the compressed or decompressed data to standard output instead of a file.This implies --keep.
-l
list information about .xz files #列出压缩文件.xz的一些信息
0-9
压缩级别
-z | force compression | 压缩文件 |
---|---|---|
-d | force decompression | 不保留源文件解压 |
-t | test compressed file integrity | 测试压缩文件完整性 |
-l | list information about .xz files | 列出压缩文件.xz的一些信息 |
-k | keep (don't delete) input files | 保留被解压缩的文件 |
-f | force overwrite of output file and (de)compress links | 强制覆盖输出文件和(de)压缩链接 |
-c | write to standard output and don't delete input files | 压缩输入标准输出并保留被压缩的文件。 |
-0 … -9 | compression preset; default is 6; take compressor and decompressor memory usage into account before using 7-9! | 压缩率预设参数 -0 到-9调节压缩率。如果不设置,默认压缩等级是6 |
-e | try to improve compression ratio by using more CPU time; does not affect decompressor memory requirements | 尝试通过使用更多的CPU时间来提高压缩比; 不影响解压内存的要求 |
-T | use at most NUM threads; the default is 1; set to 0 to use as many threads as there are processor cores | 压缩的线程数量。默认为1,设置为0表示跟处理器核数匹配 |
-q | suppress warnings; specify twice to suppress errors too | 抑制警告 指定两次以抑制错误 |
-v | be verbose; specify twice for even more verbose | 显示压缩、解压详细信息 |
-H | display the long help (lists also the advanced 选项s) | 显示更多的帮助信息,包含告警选择。 |
-V | display the version number and exit | 显示版本信息并退出 |
Living Example
直接压缩文件
[root@test-6 tmp]# ls
xx.txt
[root@test-6 tmp]# xz xx.txt
[root@test-6 tmp]# ls
xx.txt.xz
压缩后保存原文件
[root@test-6 tmp]# ls
xx.txt
[root@test-6 tmp]# xz -k xx.txt
[root@test-6 tmp]# ls
xx.txt xx.txt.xz
直接解压文件
[root@test-6 tmp]# ls
xx.txt.xz
[root@test-6 tmp]# xz -d xx.txt.xz
[root@test-6 tmp]# ls
xx.txt
解压后保存压缩包
[root@test-6 tmp]# ls
xx.txt.xz
[root@test-6 tmp]# xz -kd xx.txt.xz
[root@test-6 tmp]# ls
xx.txt xx.txt.xz
2、tar 文件和目录创建档案 (Notice:不要从/
开始打包)
https://www.runoob.com/linux/linux-comm-tar.html
tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
综上结果,初步结论:
综合起来:
1、在压缩比率上:
tar.bz2 > tgz > tar
2、占用空间与压缩比率成反比:
tar.bz2 < tgz < tar
3、耗费时间(打包,解压)
打包:
tar.bz2 > tgz > tar
解压:
tar.bz2 > tar > tgz
从效率角度来说,当然是耗费时间越短越好
因此,Linux下对于占用空间与耗费时间的折衷多选用tgz格式,不仅压缩率较高,而且打包、解压的时间都较为快速,是较为理想的选择。
结论:再一次印证了物理空间与时间的矛盾(想占用更小的空间,得到高压缩比率,肯定要牺牲较长的时间;反之,如果时间较为宝贵,要求快速,那么所得的压缩比率一定较小,当然会占用更大的空间了)。
Grammar
tar 选项 文件名.tar.gz 需要打包的文件1、需要打包的文件2……
tar(选项)(参数)
常用选项
- -c或
--create
:建立新的备份文件; - -C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
- -f <备份文件>或
--file=<备份文件>
:指定备份文件;必选项 - -x或
--extract
或--get
:从备份文件中还原文件(就是解压); - -t或
--list
:列出备份文件的内容(相当于不解压文件,而是直接查看); - -z或
--gzip
或--ungzip
:通过gzip指令处理备份文件; - -j:支持bzip2解压文件;
- -Z或
--compress
或--uncompress
:通过compress指令处理备份文件; - -J,
--xz
filter the archive through xz --exclude="范本样式"
:排除符合范本样式的文件。- -X 文件:排除文件内的文件,然后打包
- -r:添加文件到已经压缩的文件;
- -v或--verbose:显示指令执行过程;
- -v:显示操作过程;
- -i或
--ignore-zeros
忽略备份文件中的0 Byte区块,也就是EOF。防止报错 - -A或--catenate:新增文件到以存在的备份文件;
- -u:添加改变了和现有的文件到已经存在的压缩文件;
- -l:文件系统边界设置;
- -k:保留原有文件不覆盖;
- -m:保留文件不被覆盖;
- -w:确认压缩文件的正确性;
- -p或--same-permissions:用原来的文件权限还原文件;
- -P或--absolute-names:文件名使用绝对名称,不移除文件名称前的
/
号; - -N <日期格式> 或 --newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里;
- -B:设置区块大小;
- -d:记录文件的差别;
--strip-components=number
可以指定需要解压缩的文件或目录应该保留的路径级数- --no-same-owner 用于在创建归档文件时不保留文件的所有者信息,通常,在将文件归档并解压缩时,tar 会尝试保留文件的所有权和权限。但在某些情况下,特别是在使用非根用户执行 tar 命令时,可能会出现权限问题。使用
--no-same-owner
选项可以解决这个问题,它告诉 tar 忽略文件的所有者信息,而只保留文件的内容和权限。
常用选项组合:
不调用压缩工具,纯粹的打包:
- cvf (只打包,不进行压缩)
- tar cvf 打包后的文件名 需打包的文件
--remove-files
(只打包,但是打包后不需要原文件) - tvf (在不接档是,直接查看文件内容)
- xvf 需解档文件 (接档文件)
- tar xvf 需解档文件 -C 指定路径 (解压到指定路径)
- tar xvf 解档文件 需解档的某个文件名 (部分文件解档)
调用gzip压缩工具,然后打包:
- tar zcvf 归档文件的文件名 需归档的文件 (调用gzip进行归档)
- tar ztvf 归档的文件 (不解档是,直接查看gzip的归档文件)
- tar zxvf归档的文件 (解档gzip的归档文件)
调用bzip2压缩工具,然后打包:
- tar jcvf 归档文件的文件名 需归档的文件 (调用bzip2进行归档)
- tar jtvf 归档的文件 (不解档是,直接查看bzip2的归档文件)
- tar jxvf归档的文件 (解档bzip2的归档文件)
调用bzip2压缩工具,然后打包:
-
tar jcvf 归档文件的文件名 需归档的文件 (调用bzip2进行归档)
-
tar jtvf 归档的文件 (不解档是,直接查看bzip2的归档文件)
-
tar jxvf归档的文件 (解档bzip2的归档文件)
解压缩后缀为tar.xz的文件
[root@test tmp]# tar Jcvf fsdfsd.tar.xz fsdfsd/ #(压缩)
[root@test tmp]# tar Jxvf fsdfsd.tar.xz #(解压)
参数
文件或目录:指定要打包的文件或目录列表,可以多个一起打包、直接接文件或者目录。
Living Example
1、打包:
tar cvf xxx.txt.tar xxx.txt #(c创建一个文件,v创建过程,f指明打包后的名字)这样做归档文件是保留的
2、打包后不要源文件:
tar cvf xxx.txt.tar xxx.txt --remove-files
3、在不解档的时候查看归档文件的内容:
tar tvf xxx.txt.tar
4、解档文件:
tar xvf xxx.txt.tar
5、解档在指定路径里面:
tar xvf xxx.txt.tar -C /mnt/
6、解档其中某个文件:
tar xvf xxx.txt.tar 需要解档的文件名
7、归档时是没有压缩功能的,如果想归档压缩,需要调用gzip
或者bzip2
:
8、例如调用gzip:
tar zcvf xb.tar.gz xxx.txt bbb.txt
9、解档tar.gz:
tar zxvf xxx.tar.gz
10、例如调用bzip2:
tar jcvf xxx.tar.bz2
11、解压缩后缀为tar.xz的文件
[root@test tmp]# ls
ccc das fsdfsd
[root@test tmp]# tar Jcvf fsdfsd.tar.xz fsdfsd/ (压缩)
fsdfsd/
[root@test tmp]# ls
ccc das fsdfsd fsdfsd.tar.xz
[root@test tmp]# rm -rf fsdfsd
[root@test tmp]# ls
ccc das fsdfsd.tar.xz
[root@test tmp]# tar Jxvf fsdfsd.tar.xz (解压)
fsdfsd/
[root@test tmp]# ls
ccc das fsdfsd fsdfsd.tar.xz
12、归档时调用时间的作为文件名的一部分的方法?2种
第一种:
[root@AAAA7 tmp]# tar zcvf `date +%F`-linshi.tar.gz linshi/
linshi/
linshi/ssh-LkLgHcwWskxz/
tar: linshi/ssh-LkLgHcwWskxz/agent.5165: 忽略套接字(socket)
linshi/tracker-extract-files.0/
linshi/VMwareDnD/
linshi/VMwareDnD/WKY4Vh
linshi/sl.1
[root@AAAA7 tmp]# ls
2018-12-26-linshi.tar.gz linshi nginx-1.14.2.tar.gz nginx-1.14.2.zip
第二种
[root@AAAA7 tmp]# tar jcvf $(date +%F)-linshi.tar.bz2 linshi/
linshi/
linshi/ssh-LkLgHcwWskxz/
tar: linshi/ssh-LkLgHcwWskxz/agent.5165: 忽略套接字(socket)
linshi/tracker-extract-files.0/
linshi/VMwareDnD/
linshi/VMwareDnD/WKY4Vh
linshi/sl.1
[root@AAAA7 tmp]# ls
2018-12-26-linshi.tar.bz2 2018-12-26-linshi.tar.gz linshi nginx-1.14.2.tar.gz nginx-1.14.2.zip
13、tar压缩排除某个文件夹
https://blog.csdn.net/catoop/article/details/40651947
一般直接用tar命令打包很简单,直接使用即可。
tar -zcvf test.tar.gz test
在很多时候,我们要对某一个目录打包,而这个目录下有几十个子目录和子文件,我们需要在打包的时候排除其中1、2个目录或文件。
这时候我们在用tar命令打包的时候,增加参数--exclude
就能达到目的。
例如:
我们以tomcat 为例,打包的时候我们要排除 tomcat/logs 目录,命令如下:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs tomcat
如果要排除多个目录,增加--exclude
即可,如下命令排除logs和libs两个目录及文件xiaoshan.txt:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs --exclude=tomcat/xiaoshan.txt tomcat
这里要说一下注意事项:
大家都知道linux在使用tab键的时候会对目录名称自动补全,这很方便,大家也比较常用。
如我们输入 tomcat/lo 的时候按tab键,命令行会自动生成 tomcat/logs/,对于目录,最后会多一个/
这里大家要注意的时候,在我们使用tar 的--exclude
命令排除打包的时候,不能加/
,否则还是会把logs目录以及其下的文件打包进去。
错误写法:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs/ --exclude=tomcat/libs/ tomcat
正确写法:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs tomcat
14、指定需要解压缩的文件或目录应该保留的路径级数
tar -xzvf mypackage.tar.gz --strip-components=1
这个命令会将mypackage.tar.gz
包中的第一级目录去掉,并将包中的文件或目录还原到当前目录下。
在 Docker 安装中使用 strip-components
选项时,类似于以下命令:
tar -xzvf docker-xx.xx.xx.tgz -C /usr/local/bin --strip-components=1
这个命令将会在将 Docker 二进制包解压到/usr/local/bin
目录时,忽略包中的第一级目录,只将包中的可执行文件和配置文件复制到目标目录中,避免创建多余的子目录,提高了安装效率。
3、rar 打包文件
Linux操作系统环境下不支持rar文件的解压,需要安装rar压缩文件的Linux版本,下载地址:http://www.rarlab.com/download.htm
# wget https://www.rarlab.com/rar/rarlinux-x64-5.7.1.tar.gz
# ls
anaconda-ks.cfg rarlinux-x64-5.7.1.tar.gz
# tar xf rarlinux-x64-5.7.1.tar.gz
# cd rar
[root@elk-node3 rar]# ls
acknow.txt default.sfx license.txt makefile order.htm rar rarfiles.lst rar.txt readme.txt unrar whatsnew.txt
[root@elk-node3 rar]# sudo make
mkdir -p /usr/local/bin
mkdir -p /usr/local/lib
cp rar unrar /usr/local/bin
cp rarfiles.lst /etc
cp default.sfx /usr/local/lib
实例:
rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包
rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1'
rar x file1.rar 解压rar包
实例:
# rar a test.rar rar #压缩
RAR 5.71 Copyright (c) 1993-2019 Alexander Roshal 28 Apr 2019
Trial version Type 'rar -?' for help
Evaluation copy. Please register.
Creating archive test.rar
Adding rar/order.htm OK
Adding rar/acknow.txt OK
Adding rar/readme.txt OK
Adding rar/default.sfx OK
Adding rar/license.txt OK
Adding rar/rarfiles.lst OK
Adding rar/whatsnew.txt OK
Adding rar/makefile OK
Adding rar/rar OK
Adding rar/unrar OK
Adding rar/rar.txt OK
Adding rar OK
Done
unrar解压rar文件命令,从rar档案中提取文件
语法
unrar [选项][switch 命令] [文件名...][路径]
unrar <command> [-<switch 1> -<switch N>] archive [files...] [path...]
选项
-e #将文件解压缩到当前目录。
-l # 列出存档内容。
-p #将文件打印到标准输出。
-t #测试存档文件。
-v #详细列出存档。
-x #使用完整路径提取文件。
SWITCHES 开关设置
注意:每个开关必须用空格分隔。你不能把它们放在一起。
-av- #禁用真实性验证检查。
-c- #禁用评论显示
-f #刷新文件
-kb #保留破碎的提取文件
-ierr #将所有消息发送给stderr。
-inul #禁用所有消息。
-o+ #覆盖现有文件。
-o- #不要覆盖现有文件
-p<password> #设置密码。
-p- #不查询密码
-r #递归子目录。
-u #更新文件。
-v #列出所有卷。
-x<file> #排除指定的文件。
-x@<list> #排除指定列表文件中的文件。
-x@ #读取要从stdin中排除的文件名。
-y #对所有查询都假设为是。
参数
目录:指定要显示列表的目录,也可以是具体的文件
实例
将压缩文件text.rar在当前目录下解压缩,并解压完整路径。
# unrar x test.rar #解压
UNRAR 5.71 freeware Copyright (c) 1993-2019 Alexander Roshal
Extracting from test.rar
Creating rar OK
Extracting rar/order.htm OK
Extracting rar/acknow.txt OK
Extracting rar/readme.txt OK
Extracting rar/default.sfx OK
Extracting rar/license.txt OK
Extracting rar/rarfiles.lst OK
Extracting rar/whatsnew.txt OK
Extracting rar/makefile OK
Extracting rar/rar OK
Extracting rar/unrar OK
Extracting rar/rar.txt OK
All OK
免责声明: 本文部分内容转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除。