首页 > 运维 > linux运维 > 正文

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

P粉602998670
发布: 2025-08-29 11:45:01
原创
652人浏览过
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
    登录后复制
    会是一个不错的选择。它的压缩率提升通常值得那一点额外的等待。

    比格设计
    比格设计

    比格设计是135编辑器旗下一款一站式、多场景、智能化的在线图片编辑器

    比格设计124
    查看详情 比格设计
  • 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
登录后复制
就能显示一个准确的进度条,包括已处理的数据量、速度和预计剩余时间。这个组合技真的能让人安心不少,尤其是在压缩大型目录时,你知道它还在工作,而不是卡住了。

以上就是如何在Linux中压缩目录 Linux tar多格式压缩指南的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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