fix: 修复合并备份时的文件路径问题

问题描述:
- merge_backups 函数使用 basename 获取文件名
- 但文件实际在子目录中 (folders/folders.tar.gz, mysql/mysql.sql.gz)
- tar -C ${TEMP_DIR} 切换到临时目录后找不到文件

修复方案:
- 使用 ${path#${TEMP_DIR}/} 获取相对于临时目录的相对路径
- 正确构建文件列表传递给 tar 命令
- 确保 tar 能找到正确的文件路径

示例:
- 原: basename /tmp/xxx/folders/folders.tar.gz → folders.tar.gz (错误)
- 新: /tmp/xxx/folders/folders.tar.gz#/tmp/xxx/ → folders/folders.tar.gz (正确)
This commit is contained in:
Wang Defa
2025-12-25 15:42:13 +08:00
parent 1ea8d681ee
commit 8d558201a0

View File

@@ -317,9 +317,16 @@ merge_backups() {
fi
# 合并打包
tar -czf "${final_backup}" -C "${TEMP_DIR}" \
$(basename "${folders_tar}" 2>/dev/null || true) \
$(basename "${mysql_dump}" 2>/dev/null || true)
# 构建相对于 TEMP_DIR 的路径列表
local files_list=""
if [[ -n "${folders_tar}" ]] && [[ -f "${folders_tar}" ]]; then
files_list+=" ${folders_tar#${TEMP_DIR}/}"
fi
if [[ -n "${mysql_dump}" ]] && [[ -f "${mysql_dump}" ]]; then
files_list+=" ${mysql_dump#${TEMP_DIR}/}"
fi
tar -czf "${final_backup}" -C "${TEMP_DIR}" ${files_list}
if [[ -f "${final_backup}" ]]; then
local file_size=$(du -h "${final_backup}" | cut -f1)