Linux 命令之 tar

ops/2024/11/24 17:56:28/

文章目录

    • 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.ppmy.cn/ops/136362.html

相关文章

C++共享智能指针

C中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄漏。解决这个问题最有效的方式是使用智能指针。 智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动…

Rust 力扣 - 2466. 统计构造好字符串的方案数

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 题目可以转换成爬楼梯,即从第零层开始,每次能够向上爬zero层或者向上爬one层,最终能够爬到[low, high]层的种数总和 第n层是从第n - zero层或者第n - one层爬上来的&#xff0…

uni-app打包H5自定义微信分享

1、配置分享信息 修改uni-app的index.html,添加Open Graph(OG)标签来配置分享信息。 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /><meta name="description" content="标题"/>…

力扣面试经典 150(上)

文章目录 数组/字符串1. 合并两个有序数组2. 移除元素3. 删除有序数组中的重复项4. 删除有序数组的重复项II5. 多数元素6. 轮转数组7. 买卖股票的最佳时机8. 买卖股票的最佳时机II9. 跳跃游戏10. 跳跃游戏II11. H 指数12. O(1)时间插入、删除和获取随机元素13. 除自身以外数组的…

深度解析神经网络中的最大池化层:工作原理、参数配置与应用示例

深度解析神经网络中的最大池化层&#xff1a;工作原理、参数配置与应用示例 最大池化层在神经网络中的应用 最大池化层在卷积神经网络&#xff08;CNNs&#xff09;中扮演着关键角色&#xff0c;主要用于特征下采样。它通过提取特定窗口中的最大值来减小特征维度&#xff0c;…

clipboard

clipboard 现代复制到剪贴板。无闪光。只有 3kb 的 gzip 压缩。 安装 npm install clipboard --save第三方cdn提供商 <script src"https://cdn.jsdelivr.net/npm/clipboard2.0.11/dist/clipboard.min.js"></script>使用 data-clipboard-target"…

【HAProxy11】企业级反向代理HAProxy高级功能之访问控制列表(ACL)

HAProxy 高级功能 介绍 HAProxy 高级配置及实用案例 ACL 访问控制列表&#xff08;ACL&#xff0c;Access Control Lists&#xff09;是一种基于包过滤的访问控制技术&#xff0c;它可以根据设定的条 件对经过服务器传输的数据包进行过滤(条件匹配)&#xff0c;即对接收到的…

C++

目录 C 的发展总结&#xff1a;​编辑 1. C 的早期发展&#xff08;1979-1985&#xff09; 2. C 标准化过程&#xff08;1985-1998&#xff09; 3. C 标准演化&#xff08;2003-2011&#xff09; 4. C11&#xff08;2011年&#xff09; 5. C14&#xff08;2014年&#xf…