Linux 命令之 tar

news/2024/11/20 20:37:59/文章来源:https://www.cnblogs.com/luyaocf/p/18559209

目录
  • 1 tar 命令介绍
  • 2 压缩与解压缩
    • 2.1 压缩
    • 2.2 解压
  • 4 高级用法
    • 4.1 排除目录
    • 4.2 显示进度
      • 4.2.1 脚本解压缩
      • 4.2.2 命令解压缩
      • 4.2.3 压缩进度

1 tar 命令介绍

常见的压缩包有 .tar.gz、.tar.xz、.tar.bz2,以及 .rar、.zip、.7z 等压缩包。

常见的 tar 选项:- 1. 文件操作选项:-c, --create    : 创建一个新压缩文件-x, --extract   : 解压文件- 2. 解压缩选项:-j, --bzip2     : 使用 bzip2 算法解压缩文件-J, --xz        : 使用 xz 算法解压缩文件-z, --gzip      : 使用 gzip 算法解压缩文件- 3. 其它选项:-f, --file      : 使用压缩包名称。该参数必须是最后一个参数,且后面只能跟文件名-v, --verbose   : 打印处理的文件-C, --directory : 解压到指定目录

2 压缩与解压缩

不同压缩包的压缩与解压速度比较参见:https://blog.csdn.net/zzz3265/article/details/121871829

lz4、lzop 压缩时间快但压缩率堪忧;lzma、xz 压缩率优秀但耗时较长;gzip 则两者兼顾;

2.1 压缩

假如我有一个 a.c 文件,需要分别生成各种压缩包。

# 生成 tar.bz2 压缩包
tar -cjvf a.tar.bz2 a.c# 生成 tar.xz 压缩包
tar -cJvf a.tar.xz a.c# 生成 tar.gz 压缩包
tar -czvf a.tar.gz a.c

系统如果已经安装 zip,则可以使用 zip -r filename.zip file/path 生成 .zip 压缩包(-r 表示递归压缩)。

同样的,使用 rar a filename.rar file/path 生成 .rar 压缩包
rar 安装包下载地址:https://www.rarlab.com/rar/rarlinux-x64-6.0.0.tar.gz

而 .7z 压缩包的生成见其它文章,ubuntu 系统安装 7z 命令:apt install p7zip-full

2.2 解压

# 解压 tar.bz2 压缩包
tar -xjvf a.tar.bz2# 解压 tar.xz 压缩包
tar -xJvf a.tar.xz# 解压 tar.gz 压缩包
tar -xzvf a.tar.gz

使用 unzip filename.zip 解压 .zip 文件;

使用 rar x filename.rar 解压 .rar 文件

4 高级用法

4.1 排除目录

实际生成压缩包时,我们可能需要排除一些日志文件、缓存文件、版本管理文件等:

C:.
│
└─tar_test              # 根目录│  a.c              # 根目录下的源文件│├─.git              # 版本管理目录│  │  config......├─b                 # 模块目录│      b.c│      b.h│├─imgs              # 图片目录│      test.jpg│├─include           # 根目录下的头文件目录│      a.h│└─logs              # 日志目录tar.log

1)仅排除日志目录:tar -czvf tar_test.tar.gz --exclude=tar_test/logs tar_test/

关于 --exclude 后面的路径:1. 不可以是绝对路径,如 /root/tar_test/logs 2. 不能通过 ./ 指定相对路径,如 ./tar_test/logs3. 路径不能以 / 开始,如 /tar_test/logs4. 路径不能以 / 结束,如 tar_test/logs/5. --exclude 需要位于压缩路径前方

2)排除版本管理目录 .git:tar -czvf tar_test.tar.gz --exclude-vcs tar_test/

3)只压缩头文件:tar -czvf tar_test.tar.gz --exclude-vcs --exclude=tar_test/imgs --exclude=tar_test/logs --exclude=tar_test/*.c tar_test/

4.2 显示进度

4.2.1 脚本解压缩

git-bash 与 ubuntu 系统验证通过。

#!/bin/bash#/### 使用 tar 解压文件,显示解压进度## @author Aaron# @since  2020/05/07# @param  $1 解压目标文件,需要指定当前路径或绝对路径# @param  $2 文件名# @param  $3 目录路径##/
uncompress() {TOTAL_SIZE=$(gzip -l $1 | grep '%' | awk '{print $2}')BLOCK_SIZE=$(expr $TOTAL_SIZE / 51200)BLOCK_SIZE=$(expr $BLOCK_SIZE + 1)tar --blocking-factor=$BLOCK_SIZE --checkpoint=1   \--checkpoint-action="ttyout=$2 解压中: %u%\r" -zxf $1 -C $3
}uncompress U-Boot.tar.gz uboot bak

其中:$1 是要解压的文件;awk '{print $2}' 命令中的 $2 是管道传递过来的参数不用管,ttyout 后面的 $2 是指解压时的自定义提示内容;$3 指要解压到的目标路径。

使用 “uncompress U-Boot.tar.gz u-boot bak” 命令调用该函数,结果如下:

4.2.2 命令解压缩

pv ${FILE_NAME} | tar -zxf -

4.2.3 压缩进度

#!/bin/bash#/### 使用 tar 压缩文件,显示解压进度## @author Aaron# @since  2020/05/07# @param  $1 要压缩的文件目录# @param  $2 要生成的文件名称##/
compress() {tar -cf - $1 | pv -s $(($(du -sk $1 | awk '{print $1}') * 1024)) | gzip > $2
}compress bak/U-Boot uboot.tar.gz

WSL 中的 ubuntu 测试如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837513.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年11月最新版Adobe PhotoShop(26.0)中文版下载

Adobe PhotoShop 是一款功能强大的应用程序,已被各种公司、专业艺术家、设计和创作者广泛使用。该程序允许您创建、编辑和合成多层、蒙版和多种颜色模型(包括 RGB、专色、CMYK 等)的光栅图像。点击跳转下载页面 Adobe PhotoShop 是一款功能强大的应用程序,已被各种公司、专…

SpringBoot如何集成mybatis-plus

前言 大家好,我是小徐啊。我们在使用SpringBoot的时候,毫无疑问,一般是和mybatis集成的,而mybatis-plus作为mybatis的进阶,又是必须要集成的。今天,小徐就来介绍下如何在SpringBoot中集成mybatis-plus。 如何集成 首先,讲一下如何在配置文件中配置mybatis-plus的配置。主…

ubuntu安装docker+后端发布

一:更新软件包索引,并且安装必要的依赖软件 1.sudo apt-get update #更新软件包索引 2.sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common lsb-release #安装apt依赖包,用于通过HTTPS来获取Docker 仓库 二:添加 D…

IDEA如何找到在IDEA中下载jdk

前言 大家好,我是小徐啊。在使用IDEA开发java应用的时候,都是需要配置好jdk的环境的。当然,如果我们一开始,先安装好了jdk,那就不需要安装了。不然的话,我们也可以在IDEA中便捷的安装jdk。今天,小徐就来教大家如何在IDEA中安装jdk。 如何下载jdk 首先,点击下文件,项目…

第十二课 接口文档和编写接口测试用例(12.1)

一、熟悉接口文档和分析接口 1、发送接口文档 2、分析接口文档 3、了解需要测试接口,分析需求文档接口请求参数:接口返回参数:成功接口返回参数:失败================================================================================ 整理接口:(自己项目有哪些借款) …

校园防欺凌系统 AI语音监测求救打架行为系统

校园防欺凌系统 AI语音监测求救打架行为系统利用在校园内的宿舍、卫生间、楼梯角等隐蔽位置安装的AI智能语音报警终端,校园防欺凌系统 AI语音监测求救打架行为系统对这些音频进行实时分析,识别出“老师救命”、“别打我”、“有人打我老师”等关键词,就会立即触发报警机制。…

blog-2

前言 在过去的几周内,我们完成了答题程序-4, 家居强电电路模拟程序-1以及 家居强电电路模拟程序-2的练习,涉及多个知识点和编程技巧。整体来说,这三次题目集共包含了7道题目,题目难度逐步增加。 题量: 答题程序-4(3道题), 家居强电电路模拟程序-1(3道题), 家居强电电…

dir()和help()函数

dir()是 Python 中的一个内置函数。它主要用于返回一个模块、类、对象等的所有属性(包括方法、变量等)的列表。这个函数在探索新的模块或者对象的功能时非常有用。 help()也是 Python 的一个内置函数。它用于查看对象(如函数、模块、类等)的详细帮助文档。这个文档包括对象…

11.20闲话-存档

呜呜呜存档 参考使用没有存档的软件,就像吃饭不给容器一般。故存档必然是极为重要的。 下面介绍Unity的几种存档方式。 代码出处 Part.1——PlayerPrefs 应该是最简单的存档方式。 但局限性也是显然的,只能存储int, float, string 三种类型,就像在文件中存储了三个map <s…

Integrating Streamlit and Langchain data analysis agent-entrance

url:https://www.cnblogs.com/devcxx/p/18550789 一、Streamlit introduce Streamlit is an open-source Python library for quickly building data visualization and interactive web applications. It is specifically designed for data scientists and engineers, using…

WPF的Popup自动显示隐藏

简单实现鼠标移过Popup自动显示和隐藏的功能; 在xaml.cs中实现,首先创建一个定时器,设置300ms的延时:1 DispatcherTimer timer;2 3 public Function1View()4 {5 InitializeComponent();6 7 timer = new DispatcherTimer()…

WPF绑定枚举并且显示特性文本

一、文件结构 二、文件内容 FlattenMethodEnum.cspublic enum FlattenMethodEnum{[Description("单点")]SinglePoint = 0,[Description("平均")]Average = 1,} }EnumBindingSourceExtension.csusing System.Windows.Markup; using System.Diagnostics.Cod…