clean-output.sh 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/bin/bash
  2. # 需求:
  3. # 1.把 ComfyUI_x/output 中的文件打包到 bak/YYYY-MM-DD.tar.gz
  4. # 2.成功后删除原文件
  5. # 环境: Ubuntu 22.04
  6. # 执行:
  7. # chmod +x ./clean-output.sh
  8. # dos2unix ./clean-output.sh
  9. # sh ./clean-output.sh
  10. # 定时任务
  11. # crontab -e
  12. # 0 0 */3 * * /mnt/nvme0n1/ComfyUI/clean-output.sh >> /var/log/clean-output.log 2>&1
  13. # crontab -l
  14. set -euo pipefail
  15. # 根目录列表
  16. COMFY_ROOTS=(
  17. /mnt/nvme0n1/ComfyUI/ComfyUI_0
  18. # /mnt/nvme0n1/ComfyUI/ComfyUI_1
  19. # /mnt/nvme0n1/ComfyUI/ComfyUI_2
  20. # /mnt/nvme0n1/ComfyUI/ComfyUI_3
  21. # /mnt/nvme0n1/ComfyUI/ComfyUI_4
  22. # /mnt/nvme0n1/ComfyUI/ComfyUI_5
  23. # /mnt/nvme0n1/ComfyUI/ComfyUI_6
  24. # /mnt/nvme0n1/ComfyUI/ComfyUI_7
  25. )
  26. DATE=$(date +%F) # 2025-07-21
  27. LOG="/var/log/clean-output.log"
  28. # 写日志函数
  29. log() {
  30. echo "[$(date '+%F %T')] $*" | tee -a "$LOG"
  31. }
  32. log "===== Starting backup ====="
  33. for r in "${COMFY_ROOTS[@]}"; do
  34. SRC_DIR="${r}/output"
  35. BAK_DIR="${SRC_DIR}/bak"
  36. # 如果 output 为空则跳过
  37. [[ -d "$SRC_DIR" ]] || { log "$SRC_DIR 不存在,跳过"; continue; }
  38. [[ -n "$(ls -A "$SRC_DIR")" ]] || { log "$SRC_DIR 为空,跳过"; continue; }
  39. mkdir -p "$BAK_DIR"
  40. TAR_FILE="${BAK_DIR}/${DATE}.tar.gz"
  41. log "开始打包 $SRC_DIR -> $TAR_FILE"
  42. tar -czf "$TAR_FILE" -C "$SRC_DIR" --exclude='bak' . && {
  43. # tar -cJf "${TAR_FILE%.tar.gz}.tar.xz" -C "$SRC_DIR" --exclude='bak' . && {
  44. log "打包完成,开始清理源文件"
  45. # 删除除 bak 以外的文件/目录
  46. find "$SRC_DIR" -mindepth 1 ! -path "${BAK_DIR}*" -delete
  47. log "$SRC_DIR 已清理"
  48. } || {
  49. log "打包失败,保留源文件"
  50. }
  51. done
  52. log "===== Backup finished ====="
  53. # 重新解压出来
  54. # tar -xzf 2025-07-21.tar.gz -C /mnt/nvme0n1/ComfyUI/ComfyUI_0/output/