[i=s] 本帖最后由 朝闻道🇨? 于 2025-4-3 19:20 编辑 [/i]<br />
<br />
<pre><code>#!/bin/bash
基础配置
SOURCE_DIR=“路径” #需要备份的文件夹
BACKUP_DIR=“路径” #备份至的文件夹
ZIP_PASSWORD="${ZIP_PASSWORD}"
VOLUME_SIZE="2000m"
钉钉机器人配置
DINGTALK_WEBHOOK="https://oapi.dingtalk.com/robot/send"
ACCESS_TOKEN=“token”
SECRET=“密钥” # 机器人加签密钥
生成时间戳和签名
timestamp=$(date +%s%3N)
sign=$(echo -ne "${timestamp}\n${SECRET}" | openssl dgst -hmac "${SECRET}" -sha256 -binary | base64)
sign=$(echo "${sign}" | tr -d '\n')
生成通知URL
webhook_url="${DINGTALK_WEBHOOK}?access_token=${ACCESS_TOKEN}×tamp=${timestamp}&sign=${sign}"
生成时间戳信息
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
FOLDERNAME="要替换的名称${TIMESTAMP}"
ZIP_NAME="要替换的名称.zip"
创建备份目录
mkdir -p "${BACKUP_DIR}/${FOLDER_NAME}" || exit 1
记录开始时间
START_TIME=$(date +"%Y-%m-%d %H:%M:%S")
执行压缩
7z a -tzip -p"${ZIP_PASSWORD}" -mem=AES256 -v${VOLUME_SIZE} \
"${BACKUP_DIR}/${FOLDER_NAME}/${ZIP_NAME}" "${SOURCE_DIR}"
计算压缩包大小
TOTAL_SIZE=$(du -sh "${BACKUP_DIR}/${FOLDER_NAME}" | awk '{print $1}')
获取待删除的旧备份目录
cd "${BACKUP_DIR}" || exit
OLDBACKUPS=$(ls -d 要替换的名称* 2>/dev/null | sort -r | tail -n +4)
删除旧备份
DELETED_LIST=""
for dir in ${OLD_BACKUPS}; do
DELETED_LIST+="- ${dir}\n"
rm -rf "${dir}"
done
如果没有要删除的备份
[ -z "${OLD_BACKUPS}" ] && DELETED_LIST="无"
发送钉钉通知(使用新的webhook_url)
curl -s "${webhook_url}" \
-H 'Content-Type: application/json' \
-d "{
\"msgtype\": \"markdown\",
\"markdown\": {
\"title\": \"备份任务完成通知\",
\"text\": \"任务名称:要替换的名称备份\n
备份时间:${START_TIME}\n
压缩包大小:${TOTAL_SIZE}\n
删除旧备份:\n
${DELETED_LIST}\n
存储路径:\n
`${BACKUP_DIR}/${FOLDER_NAME}`\"
}
}"
</code></pre> |