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