跳转到主内容
极星编程网:以代码为星,赴技术山海!

怎么在Linux利用Tar命令对项目源码进行压缩与备份

直接用 tar -cJf 压缩源码最稳妥,但必须先处理路径、排除项和权限三件事:需切换父目录或用 -C 避免绝对路径污染;手动排除 .git 等目录时路径格式要准确;gzip 适合高频解压场景,xz 适合长期归档,且解压务必指定 -C 目标目录并预览校验。 直接用
tar -cJf
压缩源码最稳妥,但必须先处理路径、排除项和权限三件事,否则解压出来一堆嵌套目录或漏掉关键文件。 压缩前必须切换到父目录,避免绝对路径污染归档结构 比如项目在
/home/user/myapp
,若直接运行
tar -cJf myapp.tar.xz /home/user/myapp
,解压后会生成
home/user/myapp/
而非干净的
myapp/
。这是因为 tar 把绝对路径当作了归档内路径前缀。 正确做法是先
cd /home/user
,再运行
tar -cJf myapp.tar.xz myapp/
或者用
-C
参数跳过 cd 步骤:
tar -C /home/user -cJf myapp.tar.xz myapp/
绝对路径打包必须加
-P
(大写)才不被 strip,但风险高,不推荐用于源码备份 排除
.git
、
node_modules
等目录要写对路径格式
tar
不读
.gitignore
,也不会自动跳过常见缓存目录。手动排除时,路径写错就完全失效。 排除
.git
:用
--exclude=".git"
,不是
--exclude=".git/"
或
--exclude="/home/user/myapp/.git"
排除
node_modules
:确保它在当前打包路径下,命令中写
--exclude="node_modules"
即可 多个排除项可叠加:
tar -cJf myapp.tar.xz --exclude=".git" --exclude="node_modules" --exclude="dist/" myapp/
通配符有效但需引号:
--exclude="*.log"
可以,
--exclude=*.log
会被 shell 提前展开导致匹配失败 选 gzip 还是 xz?看用途别只看压缩率 源码体积不大,但解压频率可能很高——比如 CI/CD 流水线反复拉取。盲目用 xz 会导致构建变慢,尤其在 CI 机器上 CPU 有限。 CentOS Linux 7.9.2009 CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。 下载 日常开发备份、CI 拉取、需要快速生成/恢复:
tar -czf myapp.tar.gz myapp/
(
-z
= gzip) 长期归档、发布包分发、空间敏感场景:
tar -cJf myapp.tar.xz myapp/
(
-J
= xz) 想提速 xz 压缩:加
--xz-options="-T0"
启用多核,或
--xz-options="-3"
降级压缩强度(默认 -6) 注意:旧系统可能没装
xz
,
tar -cJf
会报
command not found
,先检查
xz --version
解压时务必指定
-C
目标目录并验证内容 直接
tar -xf myapp.tar.xz
解压到当前目录,极易污染环境——尤其当归档里含
Makefile
或
package.json
时,可能覆盖当前工作区文件。 永远显式指定目标:
tar -xf myapp.tar.xz -C /tmp/myapp-restore/
如果归档路径太深(如
myapp-v2.1/src/main.c
),加
--strip-components=2
跳过前两层 解压前先看内容:
tar -tJf myapp.tar.xz | head -n 5
,确认路径结构符合预期 校验是否损坏:
tar -tJf myapp.tar.xz >/dev/null && echo "OK"
,避免解压一半失败 最容易被忽略的是:
tar
默认只打包不压缩,
tar -cf
出来的文件大小几乎等于源目录,很多人误以为“备份完成了”,其实只是归档,根本没省空间。真正起作用的是
-z
或
-J
参数。

相关文章