Shell Script Generator
Shell script online generator, built-in 6 common script templates: backup, deploy, log cleanup, system monitoring, database backup, Nginx log stats, parameterized and ready to run
备份脚本 · 参数配置 目录备份与自动清理
脚本预览
#!/bin/bash
# 备份脚本 - 生成于 $(date)
# 源目录: /var/www/html
# 目标目录: /backup/www
# 保留天数: 7
# 压缩: 是
set -euo pipefail
SRC="/var/www/html"
DEST="/backup/www"
KEEP_DAYS=7
COMPRESS=true
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="${DEST}/backup_${DATE}.log"
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "${LOG_FILE}"; }
trap 'log "错误: 行 ${LINENO} 命令执行失败"; exit 1' ERR
mkdir -p "${DEST}"
log "===== 开始备份 ====="
log "源: ${SRC}"
log "目标: ${DEST}"
if [ "${COMPRESS}" = "true" ]; then
BACKUP_FILE="${DEST}/backup_${DATE}.tar.gz"
log "创建压缩备份: ${BACKUP_FILE}"
tar -czf "${BACKUP_FILE}" -C "$(dirname "${SRC}")" "$(basename "${SRC}")"
FILE_SIZE=$(du -h "${BACKUP_FILE}" | awk '{print $1}')
log "备份大小: ${FILE_SIZE}"
else
BACKUP_FILE="${DEST}/backup_${DATE}"
log "创建同步备份: ${BACKUP_FILE}"
rsync -a --delete "${SRC}/" "${BACKUP_FILE}/"
fi
# 清理过期备份
log "清理 ${KEEP_DAYS} 天前的备份..."
CLEANED=0
while IFS= read -r f; do
[ -z "${f}" ] && continue
log "删除: ${f}"
rm -f "${f}"
CLEANED=$((CLEANED + 1))
done < <(find "${DEST}" -maxdepth 1 -name "backup_*" -type f -mtime +${KEEP_DAYS})
log "本次清理 ${CLEANED} 个过期备份"
log "===== 备份完成 ====="