当前位置: 首页 > article >正文

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/logs
    3. 路径不能以 / 开始,如 /tar_test/logs
    4. 路径不能以 / 结束,如 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.kler.cn/a/402539.html

相关文章:

  • 《macOS 开发环境配置与应用开发》
  • linux基本命令2
  • 【计算机网络】网段划分
  • 用CAXA CAD电子图板导入图框、标题栏并导出pdf的方法
  • 部署一套开源客服系统,用户需要准备什么设备?
  • 4.4 MySQL 触发器(Trigger)
  • 常见的软件系统部署架构
  • SIP协议学习总结
  • Java开发经验——JDK工具类的安全问题
  • python之sklearn--鸢尾花数据集之数据降维(PCA主成分分析)
  • 鸿蒙module开发实践
  • 豆瓣书摘 | 爬虫 | Python
  • 性能稳定的云计算监控工具大全
  • 硬件工程师零基础入门:一.电子设计安全要点与欧姆定律
  • 蓝桥杯2024年11月20日个人赛报名页下方例题解答
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-conv.py
  • 重构代码之引入外部方法
  • 【c++篇】:深入c++的set和map容器--掌握提升编程效率的利器
  • 【JavaSE】【网络编程】UDP数据报套接字编程
  • MFC1(note)
  • 高频面试题(含笔试高频算法整理)基本总结回顾21
  • goland单元测试
  • 【虚拟机】VMWare的CentOS虚拟机断电或强制关机出现问题
  • 一次成功尝试:旧电脑通过网线,连接带无线网卡电脑上外网
  • Android和IOS的区别
  • C++——智能指针剖析