Skip to content

Instantly share code, notes, and snippets.

@cdgeass
Created June 10, 2025 09:34
Show Gist options
  • Save cdgeass/4a11f35fb2cd91cb94f3083b2ff9a18e to your computer and use it in GitHub Desktop.
Save cdgeass/4a11f35fb2cd91cb94f3083b2ff9a18e to your computer and use it in GitHub Desktop.
scripts
#!/bin/bash
# 函数:显示使用说明
usage() {
echo "使用方法: $0 -d <要备份的目录> -u <WebDAV URL> -l <WebDAV 用户名> -p <WebDAV 密码>"
echo " -d 指定要打包并备份的目录的路径"
echo " -u WebDAV 服务器的完整 URL (例如: https://your.webdav.server/path/)"
echo " -l WebDAV 登录用户名"
echo " -p WebDAV 登录密码"
exit 1
}
# 检查是否安装了必要的工具
check_dependencies() {
if ! command -v tar &> /dev/null; then
echo "错误: 'tar' 未安装。请安装 tar。"
exit 1
fi
if ! command -v curl &> /dev/null; then
echo "错误: 'curl' 未安装。请安装 curl。"
exit 1
fi
}
# 解析命令行参数
while getopts "d:u:l:p:" opt; do
case $opt in
d)
SOURCE_DIR="$OPTARG"
;;
u)
WEBDAV_URL="$OPTARG"
;;
l)
WEBDAV_USERNAME="$OPTARG"
;;
p)
WEBDAV_PASSWORD="$OPTARG"
;;
*)
usage
;;
esac
done
# 验证所有参数都已提供
if [ -z "$SOURCE_DIR" ] || [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
echo "错误: 所有参数都必须提供。"
usage
fi
# 检查依赖
check_dependencies
# 验证源目录是否存在
if [ ! -d "$SOURCE_DIR" ]; then
echo "错误: 指定的源目录 '$SOURCE_DIR' 不存在。"
exit 1
fi
# 生成备份文件名
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BASENAME=$(basename "$SOURCE_DIR")
BACKUP_FILENAME="${BASENAME}_${TIMESTAMP}.tar.gz"
TEMP_BACKUP_PATH="/tmp/${BACKUP_FILENAME}" # 临时存储打包文件
echo "----------------------------------------"
echo "开始备份..."
echo "源目录: $SOURCE_DIR"
echo "WebDAV URL: $WEBDAV_URL"
echo "备份文件名: $BACKUP_FILENAME"
echo "----------------------------------------"
# 1. 打包目录
echo "正在打包目录 '$SOURCE_DIR' 到 '$TEMP_BACKUP_PATH'..."
if tar -czf "$TEMP_BACKUP_PATH" -C "$(dirname "$SOURCE_DIR")" "$(basename "$SOURCE_DIR")"; then
echo "目录打包成功。"
else
echo "错误: 目录打包失败。"
rm -f "$TEMP_BACKUP_PATH" # 清理临时文件
exit 1
fi
# 2. 上传到 WebDAV
echo "正在上传备份文件到 WebDAV..."
CURL_COMMAND="curl -T \"$TEMP_BACKUP_PATH\" \"$WEBDAV_URL/$BACKUP_FILENAME\" -u \"$WEBDAV_USERNAME:$WEBDAV_PASSWORD\" --fail --progress-bar"
echo "执行命令: $CURL_COMMAND" # 打印将要执行的 curl 命令,方便调试
if eval $CURL_COMMAND; then
echo -e "\n备份文件成功上传到 WebDAV。"
else
echo -e "\n错误: 备份文件上传到 WebDAV 失败。"
echo "请检查 WebDAV URL、用户名、密码或网络连接。"
rm -f "$TEMP_BACKUP_PATH" # 清理临时文件
exit 1
fi
# 3. 清理临时文件
echo "正在清理临时备份文件: $TEMP_BACKUP_PATH"
if rm -f "$TEMP_BACKUP_PATH"; then
echo "临时文件清理成功。"
else
echo "警告: 清理临时文件失败。请手动删除 '$TEMP_BACKUP_PATH'。"
fi
echo "备份完成。"
echo "----------------------------------------"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment