File: //www/wp-cli/checkout_dir.sh
#!/bin/sh
# ================= 配置 =================
ROOT_DIR="/www/sites"
TARGET_DIR="wp-content/uploads"
LOG_FILE="/www/wp-cli/git_checkout_uploads_log.txt"
echo "========= START $(date) =========" > "$LOG_FILE"
TOTAL=0
SUCCESS=0
SKIPPED=0
FAILED=0
# ================= 遍历站点 =================
for site in "$ROOT_DIR"/*; do
[ -d "$site" ] || continue
TOTAL=$((TOTAL + 1))
echo "---- Processing: $site ----" >> "$LOG_FILE"
CODE_DIR="$site/index"
# 检查 git 仓库
if [ ! -d "$CODE_DIR/.git" ]; then
echo "SKIPPED (no git repo in index)" >> "$LOG_FILE"
SKIPPED=$((SKIPPED + 1))
continue
fi
cd "$CODE_DIR" || {
echo "FAILED (cd error)" >> "$LOG_FILE"
FAILED=$((FAILED + 1))
continue
}
# 判断 uploads 目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
echo "SKIPPED (no $TARGET_DIR)" >> "$LOG_FILE"
SKIPPED=$((SKIPPED + 1))
continue
fi
# 判断是否被 git 管理
git ls-files --error-unmatch "$TARGET_DIR" > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "SKIPPED (uploads not tracked by git)" >> "$LOG_FILE"
SKIPPED=$((SKIPPED + 1))
continue
fi
# ================= 执行 checkout =================
echo "Running: git checkout $TARGET_DIR" >> "$LOG_FILE"
git checkout -- "$TARGET_DIR" >> "$LOG_FILE" 2>&1
git clean -fd "$TARGET_DIR" >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
echo "SUCCESS" >> "$LOG_FILE"
SUCCESS=$((SUCCESS + 1))
else
echo "FAILED (git error)" >> "$LOG_FILE"
FAILED=$((FAILED + 1))
fi
done
# ================= 统计 =================
echo "========= END $(date) =========" >> "$LOG_FILE"
echo "TOTAL: $TOTAL" >> "$LOG_FILE"
echo "SUCCESS: $SUCCESS" >> "$LOG_FILE"
echo "SKIPPED: $SKIPPED" >> "$LOG_FILE"
echo "FAILED: $FAILED" >> "$LOG_FILE"