当前位置:首页 > 问答 > 正文

linux命令 文件压缩 详解linux压缩文件与压缩文件夹的tar命令用法

🐧 Linux文件压缩神器:tar命令完全指南(附场景化教学)


📦 场景引入:紧急时刻的文件打包

"明天就要交项目了,但分散在十几个文件夹的代码和文档怎么发给客户?"
"服务器磁盘告警,但日志文件又不敢直接删除..."

遇到这些情况别慌!Linux自带的tar命令就是你的救星💫,作为20多年经久不衰的打包工具,它既能压缩省空间,又能保留文件权限,今天我们就用最直白的语言+实用场景,彻底掌握这个终端利器!


🔧 基础四连招(先收藏这段!)

# 1️⃣ 打包压缩文件夹(经典操作)
tar -czvf 打包名.tar.gz 要压缩的文件夹/
# 2️⃣ 解压到当前目录
tar -xzvf 打包文件.tar.gz
# 3️⃣ 查看压缩包内容(不解压)
tar -tzvf 打包文件.tar.gz
# 4️⃣ 指定解压路径
tar -xzvf 打包文件.tar.gz -C 目标路径/

参数解析

linux命令 文件压缩 详解linux压缩文件与压缩文件夹的tar命令用法

  • -c 创建压缩包 | -x 解压
  • -z 用gzip压缩(会生成.tar.gz)
  • -v 显示过程(verbose)| -f 指定文件名
  • -t 查看内容 | -C 指定解压目录

🎯 高频实战场景

场景1️⃣:备份网站数据(保留权限)

# 打包时保留原文件权限(适合备份重要数据)
tar -czpvf backup_$(date +%Y%m%d).tar.gz /var/www/html/

📝 这里的-p参数会保留文件原始权限,$(date)自动添加当前日期

场景2️⃣:超大文件分卷压缩

# 将10GB视频文件夹分割成每个2GB的压缩包
tar -cvzf - 电影合集/ | split -b 2G - 电影合集.tar.gz.

💡 生成类似电影合集.tar.gz.aa电影合集.tar.gz.ab的文件,合并时用cat 电影合集.tar.gz.* | tar -xvzf -

场景3️⃣:排除特定文件

# 打包时跳过.log和.tmp文件
tar -czvf project.tar.gz --exclude='*.log' --exclude='*.tmp' my_project/

🔍 进阶技巧

1️⃣ 不同压缩格式PK

命令 压缩格式 速度 压缩率 典型用途
tar -czvf .tar.gz 中等 通用压缩
tar -cjvf .tar.bz2 更高 追求极致压缩
tar -cJvf .tar.xz 最慢 最高 分发大型文件
tar -cvf + 7zip .tar.7z 可变 极高 Windows兼容需求

2️⃣ 加密压缩(需安装gnupg)

# 创建加密压缩包(会提示输入密码)
tar -czvf - 敏感文件/ | gpg -c > 秘密档案.tar.gz.gpg

3️⃣ 快速对比压缩包内容

# 比较压缩包和当前文件夹差异
diff <(tar -tzvf old.tar.gz | sort) <(find ./ -type f | sort)

❌ 常见翻车现场

错误1:忘记加-f参数

tar -czv backup.tar.gz documents/  # 错误!
tar -czvf backup.tar.gz documents/ # 正确

💥 系统会报错:"tar: Refusing to write archive contents to terminal"

linux命令 文件压缩 详解linux压缩文件与压缩文件夹的tar命令用法

错误2:解压路径不存在

tar -xzvf data.tar.gz -C /non_exist_folder/  # 报错!
mkdir -p /non_exist_folder && tar -xzvf data.tar.gz -C /non_exist_folder  # 正确

错误3:Windows解压乱码

# 打包时指定UTF-8编码
tar -czvf --format=posix --owner=0 --group=0 -H ustar 项目.tar.gz 项目/

📚 冷知识彩蛋

  1. tar原名:来自"Tape ARchive"(磁带归档),诞生于1979年🎞️
  2. .tar.gz vs .tgz:完全等同,后者只是缩写(就像.jpg和.jpeg)
  3. 最快压缩:用--fast参数(但压缩率会降低)⚡
  4. 查看进度:加上--checkpoint=.100每100文件打印一个点

下次遇到文件打包需求时,记得掏出这份指南🗂️,熟练掌握tar命令后,你会发现很多图形界面工具反而显得笨拙了呢! 🚀

(本文操作验证于Linux内核5.15+环境,2025年8月仍适用)

发表评论