Linux 命令之 tar

文章目录

    • 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.rhkb.cn/news/475511.html

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

相关文章

Jenkins修改LOGO

重启看的LOGO和登录页面左上角的LOGO 进入LOGO存在的目录 [roottest-server01 svgs]# pwd /opt/jenkins_data/war/images/svgs [roottest-server01 svgs]# ll logo.svg -rw-r--r-- 1 jenkins jenkins 29819 Oct 21 10:58 logo.svg #jenkins_data目录是我挂载到了/opt目录&…

【大模型】LLaMA: Open and Efficient Foundation Language Models

链接:https://arxiv.org/pdf/2302.13971 论文:LLaMA: Open and Efficient Foundation Language Models Introduction 规模和效果 7B to 65B,LLaMA-13B 超过 GPT-3 (175B)Motivation 如何最好地缩放特定训练计算预算的数据集和模型大小&…

vue添加LCD字体(液晶字体)数字美化,前端如何引用LCD字体液晶字体,如何转换?@font-face 如何使用?

文章目录 一、效果二、下载字体格式【[https://www.dafont.com/theme.php?cat302&text0123456789](https://www.dafont.com/theme.php?cat302&text0123456789)】三、下载后,解压后都是.ttf文件,在【[https://www.fontsquirrel.com/tools/webfo…

【大数据学习 | Spark】关于distinct算子

只有shuffle类的算子能够修改分区数量,这些算子不仅仅存在自己的功能,比如分组算子groupBy,它的功能是分组但是却可以修改分区。 而这里我们要讲的distinct算子也是一个shuffle类的算子。即可以修改分区。 scala> val arr Array(1,1,2,…

Qt桌面应用开发 第五天(常用控件 自定义控件)

目录 1.QPushButton和ToolButton 1.1QPushButton 1.2ToolButton 2.RadioButton和CheckBox 2.1RadioButton单选按钮 2.2CheckBox多选按钮 3.ListWidget 4.TreeWidget控件 5.TableWidget控件 6.Containers控件 6.1QScrollArea 6.2QToolBox 6.3QTabWidget 6.4QStacke…

Excel - VLOOKUP函数将指定列替换为字典值

背景:在根据各种复杂的口径导出报表数据时,因为关联的表较多、数据量较大,一行数据往往会存在三个以上的字典数据。 为了保证导出数据的效率,博主选择了导出字典code值后,在Excel中处理匹配字典值。在查询百度之后&am…

ctfshow-web入门-SSRF(web351-web360)

目录 1、web351 2、web352 3、web353 4、web354 5、web355 6、web356 7、web357 8、web358 9、web359 10、web360 1、web351 看到 curl_exec 函数,很典型的 SSRF 尝试使用 file 协议读文件: urlfile:///etc/passwd 成功读取到 /etc/passwd 同…

【vmware+ubuntu16.04】ROS学习_博物馆仿真克隆ROS-Academy-for-Beginners软件包处理依赖报错问题

首先安装git 进入终端,输入sudo apt-get install git 安装后,创建一个工作空间名为tutorial_ws, 输入 mkdir tutorial_ws#创建工作空间 cd tutorial_ws#进入 mkdir src cd src git clone https://github.com/DroidAITech/ROS-Academy-for-Be…

AI数字人视频小程序:引领未来互动新潮流

当下,随着人工智能技术的不断创新发展,各类AI系统已经成为了创新市场发展的重要力量,AI文案、AI数字人、AI视频等,为大众带来更加便捷的创作方式,AI成为了一个全新的风口,各种AI红利持续释放,市…

leetcode400第N位数字

代码 class Solution {public int findNthDigit(int n) {int base 1;//位数int weight 9;//权重while(n>(long)base*weight){//300n-base*weight;base;weight*10;}//n111 base3 weight900;n--;int res (int)Math.pow(10,base-1)n/base;int index n%base;return String…

MySQL扩展varchar字段长度能否Online DDL

目录 问题场景 Online DDL 简介 场景复现 DBdoctor快速识别 Online DDL 总结 问题场景 在MySQL数据库中,DDL变更可以通过两种算法实现:Copy算法和In-Place算法。Copy算法会复制整个表,这可能导致长时间的写入阻塞,从而严重影…

【WPF】Prism学习(九)

Prism Dependency Injection 1.Container Locator 1.1. Container Locator的引入: Container Locator是在Prism 8.0版本中新引入的一个特性。它的目的是为了帮助Prism框架摆脱对CommonServiceLocator的依赖,并解决一些必须回退到ServiceLocator模式的内…

.NET 9与C# 13革新:新数据类型与语法糖深度解析

记录(Record)类型 使用方式: public record Person(string FirstName, string LastName); 适用场景:当需要创建不可变的数据结构,且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景:当数据结构需…

3C产品说明书电子化转变:用户体验、环保与商业机遇的共赢

在科技日新月异的当代社会,3C产品(涵盖计算机类、通信类和消费类电子产品)已成为我们日常生活中不可或缺的重要元素。与此同时,这些产品的配套说明书也经历了一场从纸质到电子化的深刻变革。这一转变不仅体现了技术的飞速进步&…

GIT 入门详解指南

前言: 注:本博客仅用于记录本人学习过程中对git的理解,仅供学习参考,如有异议请自行查资料求证 安装 使用git之前必须完成git的安装,Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行 git 安装教程 基本…

【数据结构】用四个例子来理解动态规划算法

1. 动态规划 动态规划(Dynamic Programming, DP)是一种通过将复杂问题分解为更小的子问题来求解的算法设计思想,一般用于求解具有最优子结构和重叠子问题性质的问题。动态规划的核心在于:(1)最优子结构--问…

前端两大利器:Vue与TypeScript的渊源

Vue 在前端领域占据着重要地位,是最受欢迎的前端框架之一。它被广泛应用于各种类型的 Web 应用开发,从简单的小型项目,如个人博客、公司宣传网站等,到复杂的大型企业级应用,如电商平台、金融系统等。例如,许…

【Python】使用Windows任务计划程序定时运行Python脚本!

在搭建了一个python 文件以后,如果我们想每天一次或者多次运行这个文件,或者想要一天运行多个python 文件,推荐可以使用: Win的【任务计划程序】 创建【批处理文件(.bat)】运行Python脚本。 我们可以在Wind…

分布式数据库中间件可以用在哪些场景呢

在数字化转型的浪潮中,企业面临着海量数据的存储、管理和分析挑战。华为云分布式数据库中间件(DDM)作为一款高效的数据管理解决方案,致力于帮助企业在多个场景中实现数据的高效管理和应用,提升业务效率和用户体验。九河…

Photino:通过.NET Core构建跨平台桌面应用程序,.net国产系统

一、Photino.NET简介: 最近发现了一个不错的框架 Photino.Net 一份代码运行,三个平台 windows max linux ,其中windows10,windows11,ubuntu 18.04,ubuntu 20.04 已测试均可以。mac 因为没有相关电脑没有测试。 github:https://github.com/t…