set -u DIR=/data/pms/api-server echo "############ /data/pms/api-server 清理前 ############" ls -la "$DIR" echo "--- 目录占用 ---" du -sh "$DIR" echo "--- 当前运行中的二进制(绝不能碰)---" systemctl show -p ExecStart --value pms-api MAINPID=$(systemctl show -p MainPID --value pms-api) echo "MainPID=$MAINPID exe=$(readlink -f /proc/$MAINPID/exe 2>/dev/null)" RUNNING=$(readlink -f /proc/$MAINPID/exe 2>/dev/null) echo echo "############ 候选清单(历史二进制,排除当前 pms-api / .env / uploads / exports)############" # 候选 = 该目录下的普通文件,且名字以 api-server 或 pms-api.bak 开头(严格白名单前缀) cands=() for f in "$DIR"/*; do if [ -f "$f" ]; then b=$(basename "$f") case "$b" in api-server|api-server.bak|api-server_old|pms-api.bak*|api-server*) cands+=( "$f" ) ;; esac fi done # 按 mtime 从新到旧排序 mapfile -t sorted < <(for f in "${cands[@]}"; do stat -c '%Y %n' "$f"; done | sort -rn | awk '{print $2}') KEEP=2 echo " 候选(新→旧):" for f in "${sorted[@]}"; do echo " $(stat -c '%y %s %n' "$f")" done echo " 保留最近 $KEEP 个:" for ((i=0;i