File: /www/wp-cli/checkout_file.sh
#!/bin/sh
# ================= 配置 =================
ROOT_DIR="/www/sites"
TARGET_FILE="wp-content/plugins/npcard/"
LOG_FILE="/www/wp-cli/git_checkout_vertical_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"
# 检查 index 目录下是否有 Git 仓库
CODE_DIR="$site/index"
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
}
# 判断文件或文件夹是否存在
if [ ! -f "$TARGET_FILE" ] && [ ! -d "$TARGET_FILE" ]; then
echo "SKIPPED (no $TARGET_FILE)" >> "$LOG_FILE"
SKIPPED=$((SKIPPED + 1))
continue
fi
# 执行 checkout
git checkout "$TARGET_FILE" >> "$LOG_FILE" 2>&1
git pull >> "$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"