From 8d558201a0767899c8e5cfe4570e201867702333 Mon Sep 17 00:00:00 2001 From: Wang Defa <2-wangdefa@users.noreply.gitlab.bcde.io> Date: Thu, 25 Dec 2025 15:42:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=E6=97=B6=E7=9A=84=E6=96=87=E4=BB=B6=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题描述: - 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 (正确) --- bin/backup.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/bin/backup.sh b/bin/backup.sh index 38e3933..067c32f 100755 --- a/bin/backup.sh +++ b/bin/backup.sh @@ -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)