Linux常用命令-解压缩篇
前言
Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。
tar
tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。
涉及参数说明:
-c 建立新的压缩文件
-r 添加文件到已经压缩的文件
-u 添加改变了和现有的文件到已经存在的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip解压文件
-j 支持bzip2解压文件
-v 显示操作过程
-k 保留源有文件不覆盖
-C 切换到指定目录
-f 指定压缩文件
--delete 删除包中文件
--strip-components 去除目录
--add-file 向包中添加文件
压缩
归档tar包,不压缩
tar -cvf test.tar test1.log test2.log #归档多个文件
tar -cvf test.tar test/* #归档test目录下所有文件
tar -cvf test.tar *.log #归档所有以.log结尾的文件
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。
归档并压缩为tar.gz或tar.bz2
这种方式打包对文件进行了压缩:
tar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩
查看压缩包中的文件
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
tar -tvf test.tar #可查看test包中有哪些文件
打包后删除源文件
有时候在打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:
tar -zcvf test.tar.gz test.log --remove-files
打包除指定目录或文件以外的文件
对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
向压缩包中更新文件
例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
tar -tf test.tar --add-file=test #只针对tar包
向tar包中增加文件
向tar包中增加文件可使用-r参数:
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar包
删除压缩包中的文件
在不解压的情况下,可使用--delete选项删除包中的文件:
tar --delete -f test.tar test1 #从test.tar中删除test1文件
解压
解压tar.gz和tar包到当前目录
tar -xvf test.tar.gz
tar -xvf test.tar
解压到指定目录
tar -xvf test.tar.gz -C dir
tar -xvf test.tar -C dir
解压包中指定的文件
例如test.tar.gz包中文件情况如下:
1.txt
log/
log/1.log
log/2.log
log/2.log
log/4.log
log/5.log
如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:
tar -xvf test.tar.gz log/1.log
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
解压时去掉目录结构
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
tar -xvf test.tar.gz --strip-components=1 #去掉一层目录
解压时不覆盖原文件
当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):
tar -xvkf test.tar.gz
特别提醒
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
zip/unzip
zip和unzip命令主要用于处理zip包。
压缩
涉及参数说明:
-d 从压缩文件内删除指定的文件。
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
-j 只保存文件名称及其内容,而不存放任何目录名称。
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
-u 更换较新的文件到压缩文件内。
-v 显示指令执行过程或显示版本信息。
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
- <压缩效率> 压缩效率是一个介于1-9的数值。
压缩文件
zip -r test.zip test/ #打包test目录下的文件
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
指定压缩率打包文件
zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
打包符号链接文件
前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:
zip -ry test.zip test
向压缩包中增加或更新文件
有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
zip -u test.zip test2 #向test.zip 包中增加test2文件
压缩时加密
压缩时如果需要对压缩包进行加密,可使用-P参数:
zip -r test.zip test1 test -P 66666 #使用密码66666加密
删除压缩包的特定文件
zip -d test.zip test #删除test.zip包中的test文件
解压
涉及参数说明:
-l 显示压缩文件内所包含的文件
-j 只保存文件名称及其内容,而不存放任何目录名称。
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
-v 显示指令执行过程或显示版本信息。
-d 指定解压目录,目录不存在会创建
查看压缩包中的文件信息
unzip -l test.zip #可以看到压缩包中的文件名,日期等信息
unzip -v test.zip #查看更多信息,例如crc校验信息等
解压压缩包
unzip -o test.zip -d dir #讲test.zip解压到dir目录
解压包中指定的文件
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录
unzip -o tet.zip "*.log" -d dir #解压包中所有的log文件
解压时去掉目录结构
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:
zip -oj test.zip -d ./temp
解压jar包
jar包是java归档包,但同样可用unzip解压查看里面的文件:
unzip -o java.jar -d dir
gzip
涉及参数说明:
-k 保留源文件
-d 解开压缩文件
-r 递归处理,将指定目录下的所有文件及子目录一并处理
-v 显示指令执行过程
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包
gzip -rkv ./* 递归压缩
解压也很简单:
gzip -dv test.gz
bzip2
tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
bzip2 -zk test #压缩test文件
bzip2 -dk test.bz2 #解压
rar/unrar
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:
rar a test.tar test #将test文件压缩为test.tar
rar e test.rar #解压test.tar
unrar x test.rar #解压test.tar
压缩率比较
压缩率一般来说:
tar.bz2>tar.gz>zip>tar
压缩率越高,压缩以及解压的时间也就越长。
总结
对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。
有任何补充或建议,欢迎留言^_^。
相关文章:
Linux常用命令-解压缩篇的更多相关文章
- LINUX常用命令 --- 权限篇
linux常用命令 linux用户权限相关 root 用户 相当于群主 超级用户 sudo命令 相当于群管理员 普通用户 群成员 查看用户id信息 使用linux ...
- LINUX常用命令--基础篇(一)
1. man 对你熟悉或不熟悉的命令提供帮助解释 eg:man ls 就可以查看ls相关的用法 注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行. 2. ls 查看目 ...
- linux常用命令总结篇
关于linux的一些基础命令,以前也学过,但是长时间不用还是感觉生疏了,所以记录下来以便后期温故知新. 1. cd:cd命令用来切换工作目录至dirname.cd ~ 进入用户主目录,cd - 进入之 ...
- Linux 常用命令——解压缩文件
tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunz ...
- Linux 常用命令:解压缩篇
前言 Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法. tar tar是linux中最常用的解压缩命令.tar命令可用于处理后缀名为tar,tar ...
- Linux常用命令-文本查看篇
前言 Linux常用命令中,除了cat还有很多其他用于文本查看的命令.本文将简单介绍一下这些文本查看的命令. 全文本显示--cat cat可能是常用的一个文本查看命令了,使用方法也很简单: cat f ...
- Linux 常用命令:解压缩
目录 Linux 常用命令:解压缩 说明 tar 涉及参数说明: 压缩 解压 zip压缩 涉及参数说明: uzip解压 涉及参数说明: gzip 涉及参数说明: 压缩率比较 Linux 常用命令:解压 ...
- Linux常用命令速查-汇总篇
Linux常用命令速查-用户管理 Linux常用命令速查-文件管理 Linux常用命令速查-系统监控 Linux常用命令速查-网络管理 Linux常用命令速查-定时任务 Linux常用命令速查-Vim
- Linux 常用命令:系统状态篇
前言 Linux常用命令中,有些命令可以用于查看系统的状态,通过了解系统当前的状态,能够帮助我们更好地维护系统或定位问题.本文就简单介绍一下这些命令. 1. 查看系统运行时间--uptime 有时候我 ...
随机推荐
- 多选穿梭框总结 (vue + element)
博客地址:https://ainyi.com/23 示例 介绍 实现省市区三级多选联动,可任选一个省级.市级.区级,加入已选框,也可以在已选框中删除对应的区域. 选择对应仓库,自动勾选仓库对应的省,取 ...
- C# 中 FindControl 方法及使用
FindControl 的使用方法 FindControl (String id): 在页命名容器中搜索带指定标识符的服务器控件.(有点类似javascript中的getElementById(st ...
- C#开源框架(转载)
Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Li ...
- PHP stdClass类
stdClass 是 PHP 的一个基类,几乎所有的类都继承了这个类,所以任何时候都可以被 new,让这个变量成为一个 Object.同时,实例化之后的 stdClass 是没有任何属性和方法的,也就 ...
- 谈下mysql预处理基础
传统的操作数据库方法有两种: 先写一条sql语句,然后通过mysqli->query($sql)去操作数据库(此处使用的是mysqli扩展库).这样操作并不会有什么大的错误,但是当要插入上千条上 ...
- 【Spring】21、用spring目标对象处理Transaction rolled back because it has been marked as rollback-only
在使用spring做事务管理时,很多人都会遇到这样一段异常: org.springframework.transaction.UnexpectedRollbackException: Transact ...
- 异常: Recieved SHUTDOWN signal from Resourcemanager ,Registration of NodeManager failed, Message from ResourceManager: NodeManager from localhost doesn't satisfy minimum allocations, Sending SHUTDOWN s
异常: Recieved SHUTDOWN signal from Resourcemanager ,Registration of NodeManager failed, Message from ...
- C# SqlBulkCopy类批量导入 测试
一.功能说明 1.可以选择,只导入部分列,或者导入全部列. 2.导入速度的确比一般sql要快. 3.不用写sql语句 ----------------------------------------- ...
- 二进制安装 kubernetes 1.12(一) - 安装 ETCD
软件环境 软件 版本 操作系统 CentOS 7.4 Docker 18-ce Kubernetes 1.12 服务器角色 角色 IP 组件 k8s-master 192.168.0.205 kube ...
- 吴恩达机器学习笔记 —— 19 应用举例:照片OCR(光学字符识别)
http://www.cnblogs.com/xing901022/p/9374258.html 本章讲述的是一个复杂的机器学习系统,通过它可以看到机器学习的系统是如何组装起来的:另外也说明了一个复杂 ...