Linux tar 命令 5 大进阶用法:从排除文件到增量备份实战
2026/7/5 11:56:42 网站建设 项目流程

Linux tar 命令 5 大进阶用法:从排除文件到增量备份实战

在 Linux 系统管理中,文件打包和压缩是最基础也是最重要的技能之一。虽然大多数用户都熟悉基本的 tar 命令用法,但真正的高手往往掌握着那些能够显著提升工作效率的进阶技巧。本文将深入探讨五个实用场景,帮助你在日常工作中游刃有余。

1. 使用 --exclude 精准排除特定文件/目录

在实际工作中,我们经常需要打包整个目录,但又不希望某些特定文件或子目录被打包进去。这时候--exclude参数就派上用场了。

1.1 基础排除语法

tar --exclude="pattern" -czvf archive.tar.gz directory/

这个命令会在打包 directory 目录时,排除所有匹配 pattern 的文件或目录。注意 pattern 可以使用通配符:

# 排除所有 .log 文件 tar --exclude="*.log" -czvf logs_backup.tar.gz /var/log/ # 排除特定目录 tar --exclude="cache/" -czvf web_backup.tar.gz /var/www/

1.2 多条件排除技巧

当需要排除多个模式时,可以重复使用--exclude参数:

tar --exclude="*.tmp" --exclude="temp/" --exclude=".git" -czvf project.tar.gz project/

更高效的方式是使用--exclude-from参数,从一个文件中读取排除规则:

# 创建排除规则文件 echo "*.log" > exclude.txt echo "temp/" >> exclude.txt echo "cache/" >> exclude.txt # 使用排除文件 tar --exclude-from=exclude.txt -czvf backup.tar.gz /data/

1.3 排除隐藏文件(以点开头的文件)

tar --exclude=".*" -czvf clean_backup.tar.gz directory/

1.4 排除版本控制目录

对于开发项目,我们经常需要排除版本控制目录:

tar --exclude-vcs -czvf project_src.tar.gz project/

这个参数会自动排除常见的版本控制目录如 .git, .svn, .hg 等。

2. 使用 -N 实现基于时间的增量备份

增量备份是系统管理员的重要工具,它可以显著减少备份所需的时间和存储空间。tar 的-N参数让我们能够轻松实现这一功能。

2.1 增量备份基础

tar -N "2023-01-01" -czvf incremental_backup.tar.gz /data/

这个命令只会打包 /data/ 目录中在 2023-01-01 之后被修改过的文件。

2.2 结合 find 命令实现自动化

我们可以结合 find 命令找出最近修改的文件,然后进行备份:

# 查找过去24小时内修改过的文件并打包 find /data/ -type f -mtime -1 -print0 | tar -czvf daily_backup.tar.gz --null -T -

2.3 创建完整的备份方案

一个完整的增量备份方案通常包括:

  1. 完整备份(每周一次)
  2. 差异备份(每日备份自上次完整备份以来的变化)
  3. 增量备份(每日备份自上次任何备份以来的变化)

示例脚本:

#!/bin/bash BACKUP_DIR="/backups" DATA_DIR="/data" DATE=$(date +%Y-%m-%d) # 每周日做完整备份 if [ $(date +%u) -eq 7 ]; then tar -czvf "$BACKUP_DIR/full_backup_$DATE.tar.gz" "$DATA_DIR" else # 其他日子做增量备份 LAST_FULL=$(ls -t "$BACKUP_DIR"/full_backup_* | head -1) tar -N "$(date -r "$LAST_FULL" +%Y-%m-%d)" -czvf "$BACKUP_DIR/incr_backup_$DATE.tar.gz" "$DATA_DIR" fi

3. 使用 -C 灵活指定解压目录

默认情况下,tar 会在当前目录解压文件,但使用-C参数可以指定解压目录,这在脚本中特别有用。

3.1 基本用法

tar -xzvf archive.tar.gz -C /target/directory

3.2 实际应用场景

  • 安装软件:将软件包解压到 /opt 目录
  • 恢复备份:将备份文件恢复到特定目录而非当前目录
  • 多环境部署:同一包文件部署到不同环境的不同目录
# 部署应用到测试环境 tar -xzvf app_release.tar.gz -C /var/www/test/ # 部署应用到生产环境 tar -xzvf app_release.tar.gz -C /var/www/prod/

3.3 结合其他参数的高级用法

# 解压到指定目录并保留原始权限 tar -xzvpf archive.tar.gz -C /target/directory # 解压特定文件到指定目录 tar -xzvf archive.tar.gz path/to/file -C /target/directory

4. 结合 find 命令进行条件打包

find 和 tar 的组合是 Linux 下最强大的文件管理组合之一,可以实现高度定制化的打包操作。

4.1 按文件类型打包

# 只打包 .php 文件 find /var/www/ -type f -name "*.php" -print0 | tar -czvf php_files.tar.gz --null -T -

4.2 按文件大小打包

# 打包大于1MB的文件 find /data/ -type f -size +1M -print0 | tar -czvf large_files.tar.gz --null -T -

4.3 按修改时间打包

# 打包过去7天内修改过的文件 find /home/user/ -type f -mtime -7 -print0 | tar -czvf recent_files.tar.gz --null -T -

4.4 排除特定文件后的打包

# 排除所有临时文件后打包 find /data/ -type f ! -name "*.tmp" -print0 | tar -czvf clean_data.tar.gz --null -T -

5. 创建带权限保留的备份包

在备份系统文件或网站时,保留原始文件权限至关重要。tar 的-p参数可以完美解决这个问题。

5.1 保留文件权限

tar -czvpf backup.tar.gz /etc/

-p参数会保留文件的原始权限信息,包括:

  • 文件所有者
  • 文件组
  • 权限位(rwx)
  • 时间戳

5.2 系统备份实战

一个完整的系统备份应该:

  1. 保留所有权限
  2. 排除不必要的临时文件
  3. 记录备份元信息
#!/bin/bash BACKUP_FILE="/backups/full_system_$(date +%Y%m%d).tar.gz" EXCLUDE_FILE="/backups/exclude.list" # 创建排除列表 cat > "$EXCLUDE_FILE" <<EOF /proc/* /sys/* /tmp/* /run/* /mnt/* /media/* /lost+found /backups/* EOF # 执行备份 tar --exclude-from="$EXCLUDE_FILE" -czvpf "$BACKUP_FILE" /

5.3 恢复带权限的备份

# 恢复整个系统备份 tar -xzvpf full_system_backup.tar.gz -C /

注意:恢复系统备份通常需要在救援模式下进行,且要确保目标目录结构与备份时一致。

总结

掌握这些 tar 的进阶用法可以显著提升你在 Linux 系统下的工作效率。无论是日常文件管理还是系统维护,这些技巧都能让你更加游刃有余。记住,好的系统管理员不是知道所有命令的人,而是知道如何组合使用命令来解决实际问题的人。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询