tar命令默认仅打包不压缩,需加-z(gzip)或-j(xz)才真正减体积;排除文件须用--exclude并注意路径写法;增量备份推荐--newer-mtime而非--listed-incremental;解压务必指定-c目录并校验内容。

tar 命令默认不压缩,加 -z 或 -J 才真正减体积
很多人执行 tar -cf backup.tar /data 后发现文件大小几乎没变,误以为“备份完成了”,其实只是打包(archive),没做压缩(compress)。真正节省空间得靠压缩算法参数:
-
-z对应 gzip,兼容性最好,但压缩率中等、速度较快;适合日常备份和跨平台传输 -
-J对应 xz,压缩率高、解压慢,适合长期归档;注意旧版系统可能不带xz工具 -
-Z(compress)和-j(bzip2)已基本淘汰,新项目别用
错误示范:tar -cf archive.tar dir/ → 10GB 目录打完还是 10GB;正确做法:tar -cJf archive.tar.xz dir/ → 可能压到 3–4GB
排除临时文件和缓存用 --exclude,别依赖 .gitignore
tar 不读 .gitignore,也不会自动跳过 /tmp、node_modules 这类目录。手动排除不光省空间,还能避免权限错误或挂起(比如挂载点里有 NFS 文件):
- 路径要写对:用
--exclude='node_modules',不是--exclude=node_modules/(尾部斜杠会失效) - 支持多次使用:
tar -cJf app.tar.xz --exclude='.git' --exclude='*.log' /app - 绝对路径慎用:
--exclude='/var/log/*.old'在打包/var时才生效;若从根目录外运行,需调整匹配逻辑
常见坑:tar -cf backup.tar --exclude='*.tmp' / 会报错,因为 / 下很多文件无权读;应先 cd / 再相对路径打包
增量备份靠 --newer-mtime,别迷信 --listed-incremental
--listed-incremental 看似强大,实际维护麻烦:它依赖一个 snapshot 文件,一旦丢失或损坏,后续所有增量都不可靠。更稳的方案是用时间戳控制:
家电公司网站源码是一个以米拓为核心进行开发的家电商城网站模板,程序采用metinfo5.3.9 UTF8进行编码,软件包含完整栏目与数据。安装方法:解压上传到空间,访问域名进行安装,安装好后,到后台-安全与效率-数据备份还原,恢复好数据后到设置-基本信息和外观-电脑把网站名称什么的改为自己的即可。默认后台账号:admin 密码:132456注意:如本地测试中127.0.0.1无法正常使用,请换成l
-
--newer-mtime='2024-05-01':只打包修改时间在该日期之后的文件(注意是 mtime,不是 ctime) - 配合
date -d 'yesterday' +%Y-%m-%d可做成每日自动脚本 - 如果源文件被 touch 过但内容没变,仍会被重打;对严格去重场景,得上
rsync --link-dest或专用备份工具
示例:tar -cJf daily-$(date +%F).tar.xz --newer-mtime='2024-05-10' /home/user/docs
解压时权限和路径安全必须加 --strip-components 和 -C
直接 tar -xf archive.tar 解压到当前目录,极可能污染环境——尤其当归档里含 etc/passwd 或绝对路径时:
- 永远显式指定目标目录:
tar -xf archive.tar.xz -C /tmp/restore - 若归档结构冗余(如
project-v1.2/src/main.c),用--strip-components=2跳过前两层路径 - 加
--warning=no-timestamp可忽略 mtime 设置失败的提示(某些容器环境不支持改时间)
最危险操作:sudo tar -xf evil.tar —— 里面藏个 ../../../etc/shadow 就完蛋。生产环境务必加 -C 并检查归档内容:tar -tf archive.tar.xz | head
真正难的不是命令怎么写,是判断哪些文件值得备、哪些时间点该切片、以及恢复时敢不敢信那个 .snar 文件。这些没法靠一个参数解决。









