0

0

如何在Linux中压缩目录 Linux tar多格式压缩指南

P粉602998670

P粉602998670

发布时间:2025-08-29 11:45:01

|

701人浏览过

|

来源于php中文网

原创

tar命令是Linux中压缩目录的核心工具,支持gzip、bzip2、xz、zstd等多种压缩格式,兼顾速度与压缩率;通过-c、-x、-t等选项可实现打包、解压与查看内容,结合-f指定文件名,-v显示过程,-C指定解压路径;使用--exclude可排除特定文件,split可分卷压缩大文件,配合pv命令能显示压缩进度,提升管理效率。

如何在linux中压缩目录 linux tar多格式压缩指南

在Linux中,压缩目录最常用且功能强大的工具

tar
莫属。它不仅能将多个文件和目录打包成一个归档文件,还能结合各种压缩算法(如gzip、bzip2、xz、zstd)实现不同程度的压缩,兼顾了速度和文件大小的需求,是系统管理员和开发者处理文件归档的得力助手。理解并灵活运用
tar
的多格式压缩,是提升工作效率的关键一步。

解决方案

在Linux中,使用

tar
命令压缩目录的核心在于组合打包(
c
,创建归档)和压缩(例如
z
代表gzip,
j
代表bzip2,
j
代表xz)选项,并指定目标文件名和源目录。

最基础的压缩目录命令格式是:

tar -选项 目标文件名 源目录

例如,要将名为

my_project
的目录使用
gzip
格式压缩成
my_project.tar.gz
tar -czvf my_project.tar.gz my_project/
这里的选项含义是:

  • c
    : 创建一个新的归档文件。
  • z
    : 使用gzip压缩归档文件。
  • v
    : 显示压缩过程中的文件列表(verbose模式)。
  • f
    : 指定归档文件的名称。

如果你想使用其他压缩格式,只需更换对应的压缩选项:

  • 使用bzip2压缩(生成

    .tar.bz2
    文件):
    tar -cjvf my_project.tar.bz2 my_project/
    j
    选项代表bzip2压缩)

  • 使用xz压缩(生成

    .tar.xz
    文件):
    tar -cJvf my_project.tar.xz my_project/
    j
    选项代表xz压缩)

  • 使用zstd压缩(生成

    .tar.zst
    文件):
    tar -cvf - my_project/ | zstd -T0 > my_project.tar.zst
    或者,如果你的
    tar
    版本支持,可以直接:
    tar -c --zstd -vf my_project.tar.zst my_project/
    zstd
    通常需要通过管道或
    --use-compress-program
    选项来集成,新版
    tar
    可能直接支持
    --zstd
    。) 我个人更倾向于管道方式,它在各种Linux发行版上兼容性更好,也更能体现Unix哲学的灵活性。

tar压缩的不同格式有何优劣?

选择哪种压缩格式,往往取决于你对压缩速度和压缩率的需求平衡。这就像在赶时间做饭和精雕细琢一道菜之间做选择。

  • gzip (

    .gz
    ): 这是最古老、最普及的压缩格式之一。它的压缩速度极快,但压缩率相对一般。优点是几乎所有Linux系统都内置支持,解压速度也很快。我发现,在处理日常的日志文件、临时备份或者需要快速传输的小型代码库时,
    gzip
    的快速完成让我感觉很舒服,几秒钟就能搞定几百兆的文件,效率至上。

  • bzip2 (

    .bz2
    ): 相较于gzip,bzip2的压缩速度要慢一些,但它能提供更好的压缩率。如果你对文件大小有更高的要求,但压缩时间不是那么敏感,比如归档一个长期不用的项目、发布一个中等大小的数据集,或者存储一些对磁盘空间比较敏感的文档,
    bzip2
    会是一个不错的选择。它的压缩率提升通常值得那一点额外的等待。

    白果AI论文
    白果AI论文

    论文AI生成学术工具,真实文献,免费不限次生成论文大纲 10 秒生成逻辑框架,10 分钟产出初稿,智能适配 80+学科。支持嵌入图表公式与合规文献引用

    下载
  • xz (

    .xz
    ):
    xz
    是目前主流压缩算法中压缩率最高的,但代价是压缩和解压速度都非常慢。它通常用于对极致压缩有要求的场景,例如Linux发行版的软件包、固件更新包、或者需要长期存储且访问频率不高的超大型数据集。我记得有一次归档一个上百GB的科研数据,为了节省宝贵的存储空间,我硬着头皮用了
    xz
    ,虽然等了几个小时,但看到最终文件大小比
    gzip
    小了将近一半时,那种满足感是实实在在的。

  • zstd (

    .zst
    ):
    zstd
    是Facebook开发的一种现代压缩算法,它的出现真的改变了我的工作流。它在速度和压缩率之间找到了一个非常优秀的平衡点。通常情况下,
    zstd
    的压缩速度接近
    gzip
    ,但压缩率却能达到甚至超越
    bzip2
    ,在某些情况下甚至能接近
    xz
    的低档位。对于我来说,很多时候我甚至不用纠结是选速度还是选大小了,直接用
    zstd
    就能得到一个令人满意的结果。它在备份虚拟机镜像、传输大型二进制文件或任何需要兼顾性能和空间效率的场景下,都是一个非常“香”的选择。

如何安全地查看和解压tar压缩包内容?

在处理

tar
压缩包时,了解其内容并在不污染当前工作目录的情况下解压至关重要。我见过不少初学者直接在根目录解压,然后发现整个系统都乱了,所以养成良好的习惯很重要。

查看压缩包内容: 在解压之前,通常我们想知道压缩包里到底有什么,特别是当你收到一个来源不明的压缩包时。

tar -tf my_project.tar.gz
这里的选项含义是:

  • t
    : 列出归档文件中的内容(table of contents)。
  • f
    : 指定要操作的归档文件。 对于其他格式,只需替换文件名即可,例如
    my_project.tar.bz2
    my_project.tar.xz
    。这个命令会清晰地列出压缩包内所有文件和目录的路径,让你对内容一目了然。

解压压缩包: 解压命令与压缩命令类似,只是将

c
(创建)替换为
x
(提取)。
tar -xf my_project.tar.gz

这会将

my_project.tar.gz
中的所有内容解压到当前目录。然而,为了避免文件散落一地,我强烈建议你指定一个目标解压目录
tar -xf my_project.tar.gz -C /path/to/extract/
这里的
-C
选项(大写C)就是用来指定解压目录的。如果
/path/to/extract/
目录不存在,你需要先创建它:
mkdir -p /path/to/extract/
然后执行解压命令。这是一个非常好的习惯,能确保你的文件组织有序,避免不必要的混乱。

对于不同压缩格式的归档文件,

tar
通常能根据文件扩展名自动识别并使用正确的解压算法。例如:

  • 解压
    .tar.bz2
    tar -xf my_project.tar.bz2 -C /path/to/extract/
  • 解压
    .tar.xz
    tar -xf my_project.tar.xz -C /path/to/extract/
  • 解压
    .tar.zst
    tar -xf my_project.tar.zst -C /path/to/extract/
    (如果tar版本支持) 或者:
    zstd -d < my_project.tar.zst | tar -xf - -C /path/to/extract/

在Linux中,如何更高效、更智能地管理tar压缩任务?

在日常运维和开发中,仅仅知道如何压缩和解压是不够的。我们经常需要处理一些复杂场景,比如排除特定文件、分卷压缩大文件,或者在漫长的压缩过程中看到进度条。

1. 排除特定文件或目录 (

--exclude
): 在备份整个项目目录时,你可能不希望包含一些临时文件、日志文件、编译产物(如
target/
目录)、Git仓库的内部对象(
.git/objects
)或node_modules目录。
--exclude
选项就是为此而生。
tar -czvf project_backup.tar.gz my_project/ --exclude='my_project/node_modules' --exclude='my_project/logs/*.log' --exclude='my_project/tmp/'
你可以多次使用
--exclude
来排除多个模式。我记得有一次备份一个上百GB的Git仓库,忘记排除
.git/objects
里那些巨大的二进制文件,结果压缩了半天,文件还是大得离谱。后来学会了
--exclude
,才真正体会到什么叫“事半功倍”,它能显著减少压缩时间和最终文件大小。

2. 分卷压缩大文件: 当你要压缩一个非常大的目录,并且需要将其传输到有文件大小限制的存储介质(如FAT32格式的U盘)或通过邮件发送时,分卷压缩就显得尤为重要。你可以将一个大的

tar
归档文件分割成多个小文件。
tar -cvf - my_large_directory/ | split -b 1G - my_large_directory.tar.part
这个命令的含义是:

  • tar -cvf - my_large_directory/
    : 将
    my_large_directory
    打包,并通过标准输出(
    -
    )输出。
  • |
    : 管道,将
    tar
    的输出作为
    split
    的输入。
  • split -b 1G - my_large_directory.tar.part
    :
    split
    命令将标准输入分割成每份1GB(
    -b 1G
    )的文件,并以
    my_large_directory.tar.partaa
    ,
    my_large_directory.tar.partab
    等命名。 解压时,你需要先合并这些分卷文件,然后再解压:
    cat my_large_directory.tar.part* > my_large_directory.tar
    tar -xf my_large_directory.tar
    当然,你也可以在
    split
    之前加入压缩,例如:
    tar -czvf - my_large_directory/ | split -b 1G - my_large_directory.tar.gz.part

3. 显示压缩进度 (

pv
): 对于大型目录的压缩,你可能需要等待很长时间,而
tar
默认是静默执行的,这会让人感到不安。
pv
(Pipe Viewer)工具可以显示数据通过管道的进度,这对于监控长时间运行的压缩任务非常有帮助。 首先,你可能需要安装
pv
sudo apt-get install pv
(Debian/Ubuntu) 或
sudo yum install pv
(CentOS/RHEL)。 然后,你可以这样使用它:
tar -cvf - my_large_directory/ | pv -s $(du -sb my_large_directory/ | awk '{print $1}') | gzip > my_large_directory.tar.gz
这里的
pv -s $(du -sb my_large_directory/ | awk '{print $1}')
会计算
my_large_directory
的总大小并将其传递给
pv
pv
就能显示一个准确的进度条,包括已处理的数据量、速度和预计剩余时间。这个组合技真的能让人安心不少,尤其是在压缩大型目录时,你知道它还在工作,而不是卡住了。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

185

2023.09.27

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

641

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

528

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

264

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

550

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

513

2024.04.09

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

403

2023.08.14

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号