如何将指定目录添加到每周生成的特定tar压缩归档文件中
解决方案
要将$BACKUP_CONFIG目录追加到已有的$SOURCE/$date.tar归档中,你可以直接使用tar命令的追加模式,具体操作如下:
1. 推荐:安全追加(保留相对路径)
首先确保你的变量已经正确定义:
SOURCE="/opt/gitlab/full" BACKUP_CONFIG="/etc/gitlab" # 假设$date是你已经定义好的日期变量,比如 date=$(date +%Y%m%d)
然后执行以下命令完成追加:
tar -rf "$SOURCE/$date.tar" -C / "${BACKUP_CONFIG#/}"
命令细节解释
-r:启用追加模式,向已存在的tar归档中添加新的文件或目录-C /:切换到根目录执行操作,配合后续的相对路径,避免归档中存入绝对路径(防止恢复时意外覆盖系统原有的/etc/gitlab)${BACKUP_CONFIG#/}:Shell参数替换技巧,去掉$BACKUP_CONFIG开头的斜杠,把/etc/gitlab转换成etc/gitlab,实现相对路径归档
2. 可选:直接追加绝对路径(不推荐)
如果你确实需要在归档中保留完整的绝对路径,可以直接执行:
tar -rf "$SOURCE/$date.tar" "$BACKUP_CONFIG"
⚠️ 注意:这种方式会把/etc/gitlab的完整绝对路径存入归档,后续恢复时若不指定目标目录,会直接覆盖系统中的/etc/gitlab目录,风险较高。
关键注意事项
- 仅支持未压缩的tar归档:你的文件是
.tar格式(无压缩后缀),可以直接追加。如果是压缩格式(比如.tar.gz、.tar.xz),tar不支持直接追加内容,需要先解压原归档、添加新内容后重新压缩:# 示例:处理压缩的tar.gz归档 # 创建临时目录 mkdir -p /tmp/gitlab_backup_temp # 解压原归档到临时目录 tar -xf "$SOURCE/$date.tar.gz" -C /tmp/gitlab_backup_temp # 复制配置目录到临时目录 cp -r "$BACKUP_CONFIG" /tmp/gitlab_backup_temp/ # 重新创建压缩归档 tar -czf "$SOURCE/updated_$date.tar.gz" -C /tmp/gitlab_backup_temp . # 清理临时目录 rm -rf /tmp/gitlab_backup_temp - 权限与文件存在性检查:执行命令前要确认
$SOURCE/$date.tar文件存在,且当前用户拥有该文件和$SOURCE目录的写入权限。
内容的提问来源于stack exchange,提问作者Bobo Lee
相关产品推荐
相关产品推荐

