Created
June 10, 2025 09:34
-
-
Save cdgeass/4a11f35fb2cd91cb94f3083b2ff9a18e to your computer and use it in GitHub Desktop.
scripts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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