Linux 命令之 tar

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.youkuaiyun.com/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 测试如下:

<think>好的,我现在需要帮助用户了解如何在Linux中使用tar命令创建和压缩tar包。首先,我应该回顾用户提供的系统级指令,确保回答符合格式要求,比如行内数学表达式用$...$,独立公式用$$...$$,正确使用LaTeX语法,用中文回答,并生成相关问题。同时,用户引用了三个参考资料,我需要从中提取有用的信息,并在回答中适当引用。 首先,用户的问题是关于如何创建和压缩tar包,以及tar命令的使用指南。根据引用内容,引用[1]提到tar命令用于打包和压缩,引用[2]说明了tar通常与gzip和bzip2结合使用,引用[3]给出了创建目录并打包的例子。需要将这些信息整合成一个结构清晰的指南。 接下来,我需要按照用户的要求分步骤说明。可能的结构包括基础命令格式、创建tar包、压缩选项、解压命令、常用参数等部分。每个部分需要结合引用中的例子,比如使用tar -cvf创建包,用gzip或bzip2压缩,解压时的不同参数。 需要注意的是,用户希望回答真实可靠,因此要确保命令的正确性。例如,打包目录的命令tar -cvf newDir.tar dirA dirB dirC,来自引用[3]。压缩时使用-z或-j选项对应不同的压缩方式,如引用[2]提到的.tar.gz.tar.bz2。 同时,用户要求生成相关问题。根据主题,可能的问题包括不同压缩算法的区别、查看tar包内容的方法、排除特定文件、分卷压缩等,这些都需要基于命令的功能来设计。 最后,检查是否所有行内代码和数学表达式都正确使用了$或$$,引用标识是否正确添加,比如每个引用来源的末尾加上[^1]、[^2]或[^3]。确保没有使用markdown格式,语言口语化,结构清晰。</think>### Linux tar命令使用指南 #### 一、基础命令格式 tar命令的标准结构为: ``` tar [选项] 文件名 待打包文件/目录 ``` 其中`-c`表示创建打包文件,`-x`表示解包,`-v`显示过程详情,`-f`指定文件名(必须放在最后)[^3] #### 二、创建tar包 1. **基础打包** 将dirA、dirB、dirC打包为newDir.tar: ```bash tar -cvf newDir.tar dirA dirB dirC ``` 注意顺序:`选项 > 目标文件名 > 源文件` 2. **增量打包** 使用`-u`选项添加新文件: ```bash tar -uvf existing.tar newfile.txt ``` #### 三、压缩选项 | 参数 | 压缩算法 | 文件扩展名 | 示例命令 | |------|---------|------------|----------| | `-z` | gzip | .tar.gz | `tar -czvf project.tar.gz src/` | | `-j` | bzip2 | .tar.bz2 | `tar -cjvf logs.tar.bz2 /var/log` | | `-J` | xz | .tar.xz | `tar -cJvf backup.tar.xz data/` | #### 四、解压命令 解压不同格式的压缩包: ```bash tar -xzvf file.tar.gz # 解压gzip tar -xjvf file.tar.bz2 # 解压bzip2 tar -xJvf file.tar.xz # 解压xz ``` #### 五、高级技巧 1. **查看内容** 不解压查看包内文件列表: ```bash tar -tf archive.tar ``` 2. **排除文件** 使用`--exclude`参数: ```bash tar -czvf backup.tar.gz --exclude='*.tmp' /home/user ``` 3. **分卷压缩** 将大文件分割为100M的卷: ```bash tar -czvf - bigfile | split -b 100M - bigfile.tar.gz. ``` ### 注意事项 1. 打包时尽量使用相对路径 2. 压缩率排序:xz > bzip2 > gzip(压缩时间相反) 3. 长期存储推荐使用xz格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值