自动清理jekyll缓存的脚本

wen 实用脚本 1

本文目录导读:

自动清理jekyll缓存的脚本

  1. Bash 脚本版本
  2. 使用方法
  3. 高级版本(带参数选项)
  4. 复杂用法示例
  5. 注意事项
  6. 集成到工作流

Bash 脚本版本

#!/bin/bash
# Jekyll 缓存清理脚本
# 保存为 clean-jekyll-cache.sh
echo "🔍 开始清理 Jekyll 缓存..."
# 项目根目录(脚本所在目录)
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 需要清理的目录列表
CACHE_DIRS=(
    "_site"
    ".jekyll-cache"
    ".sass-cache"
)
# 清理函数
clean_directory() {
    local dir="$PROJECT_DIR/$1"
    if [ -d "$dir" ]; then
        echo "🗑️  删除: $dir"
        rm -rf "$dir"
        echo "✅ 已删除: $1"
    else
        echo "ℹ️  目录不存在,跳过: $1"
    fi
}
# 清理文件
clean_file() {
    local file="$PROJECT_DIR/$1"
    if [ -f "$file" ]; then
        echo "🗑️  删除: $file"
        rm -f "$file"
        echo "✅ 已删除: $1"
    else
        echo "ℹ️  文件不存在,跳过: $1"
    fi
}
echo "📁 项目目录: $PROJECT_DIR"
echo ""
# 清理缓存目录
for dir in "${CACHE_DIRS[@]}"; do
    clean_directory "$dir"
done
# 清理 Gemfile.lock(可选,如果依赖有变化)
# clean_file "Gemfile.lock"
echo ""
echo "✨ Jekyll 缓存清理完成!"
echo "💡 现在可以运行 'bundle exec jekyll serve' 重新构建项目"

使用方法

  1. 保存脚本

    # 将脚本保存到 Jekyll 项目根目录
    nano clean-jekyll-cache.sh
    # 粘贴脚本内容后保存
  2. 添加执行权限

    chmod +x clean-jekyll-cache.sh
  3. 运行脚本

    ./clean-jekyll-cache.sh

高级版本(带参数选项)

#!/bin/bash
# Jekyll 缓存清理脚本 - 高级版本
# 保存为 clean-jekyll-cache.sh
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 默认选项
CLEAN_SITE=true
CLEAN_CACHE=true
CLEAN_SASS=true
CLEAN_LOCK=false
DRY_RUN=false
VERBOSE=false
# 帮助信息
show_help() {
    echo "用法: $0 [选项]"
    echo ""
    echo "选项:"
    echo "  -h, --help        显示帮助信息"
    echo "  -s, --site        清理 _site 目录 (默认: true)"
    echo "  -c, --cache       清理 .jekyll-cache (默认: true)"
    echo "  -a, --sass        清理 .sass-cache (默认: true)"
    echo "  -l, --lock        清理 Gemfile.lock (默认: false)"
    echo "  -d, --dry-run     只显示要清理的内容,不实际删除"
    echo "  -v, --verbose     显示详细信息"
    echo "  -y, --yes         自动确认,不提示"
    echo ""
    echo "示例:"
    echo "  $0                  # 清理默认缓存"
    echo "  $0 -d              # 预览模式"
    echo "  $0 -l -y           # 清理所有包括 Gemfile.lock"
    echo "  $0 -s false -c false  # 只清理 .sass-cache"
}
# 解析参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -h|--help)
            show_help
            exit 0
            ;;
        -s|--site)
            CLEAN_SITE="$2"
            shift 2
            ;;
        -c|--cache)
            CLEAN_CACHE="$2"
            shift 2
            ;;
        -a|--sass)
            CLEAN_SASS="$2"
            shift 2
            ;;
        -l|--lock)
            CLEAN_LOCK="$2"
            shift 2
            ;;
        -d|--dry-run)
            DRY_RUN=true
            shift
            ;;
        -v|--verbose)
            VERBOSE=true
            shift
            ;;
        -y|--yes)
            AUTO_CONFIRM=true
            shift
            ;;
        *)
            echo -e "${RED}错误: 未知选项 $1${NC}"
            show_help
            exit 1
            ;;
    esac
done
# 项目根目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# 显示信息
echo -e "${GREEN}🔍 Jekyll 缓存清理工具${NC}"
echo -e "${YELLOW}📁 项目目录: $SCRIPT_DIR${NC}"
echo ""
# 确认操作
if [ "$DRY_RUN" = false ] && [ "$AUTO_CONFIRM" != true ]; then
    echo -e "${YELLOW}⚠️  将清理以下缓存:${NC}"
    [ "$CLEAN_SITE" = true ] && echo "  - _site"
    [ "$CLEAN_CACHE" = true ] && echo "  - .jekyll-cache"
    [ "$CLEAN_SASS" = true ] && echo "  - .sass-cache"
    [ "$CLEAN_LOCK" = true ] && echo "  - Gemfile.lock"
    echo ""
    read -p "是否继续? (y/N): " confirm
    if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
        echo -e "${YELLOW}取消操作${NC}"
        exit 0
    fi
fi
# 清理函数
clean_item() {
    local path="$1"
    local item_name="$2"
    if [ "$DRY_RUN" = true ]; then
        if [ -e "$SCRIPT_DIR/$path" ]; then
            echo -e "${YELLOW}📋 [预览] 将删除: $path${NC}"
        else
            echo -e "${YELLOW}📋 [预览] 目录不存在: $path${NC}"
        fi
        return
    fi
    if [ -e "$SCRIPT_DIR/$path" ]; then
        if [ "$VERBOSE" = true ]; then
            echo -e "${YELLOW}🗑️  删除: $SCRIPT_DIR/$path${NC}"
        fi
        rm -rf "$SCRIPT_DIR/$path"
        echo -e "${GREEN}✅ 已删除: $item_name${NC}"
    else
        echo -e "${YELLOW}ℹ️  不存在: $item_name${NC}"
    fi
}
# 执行清理
COUNT=0
if [ "$CLEAN_SITE" = true ]; then
    clean_item "_site" "_site 目录"
    COUNT=$((COUNT + 1))
fi
if [ "$CLEAN_CACHE" = true ]; then
    clean_item ".jekyll-cache" ".jekyll-cache 目录"
    COUNT=$((COUNT + 1))
fi
if [ "$CLEAN_SASS" = true ]; then
    clean_item ".sass-cache" ".sass-cache 目录"
    COUNT=$((COUNT + 1))
fi
if [ "$CLEAN_LOCK" = true ]; then
    clean_item "Gemfile.lock" "Gemfile.lock 文件"
    COUNT=$((COUNT + 1))
fi
echo ""
if [ "$DRY_RUN" = true ]; then
    echo -e "${YELLOW}📋 预览完成(共 $COUNT 项)${NC}"
else
    echo -e "${GREEN}✨ 清理完成!共处理 $COUNT 项${NC}"
    echo -e "${GREEN}💡 运行 'bundle exec jekyll serve' 重新构建项目${NC}"
fi

复杂用法示例

预览模式

./clean-jekyll-cache.sh -d

只清理 .sass-cache

./clean-jekyll-cache.sh -s false -c false -a true

自动清理所有(包括 Gemfile.lock)

./clean-jekyll-cache.sh -l true -y

显示详细信息

./clean-jekyll-cache.sh -v

注意事项

  1. 备份: _site 目录包含手动修改的文件,请先备份
  2. Gemfile.lock: 清理需要重新运行 bundle install
  3. Git 忽略: 确保这些缓存目录已在 .gitignore 中配置

集成到工作流

可以作为 npm 脚本或 make 命令集成:

// package.json
{
  "scripts": {
    "clean": "bash clean-jekyll-cache.sh -y",
    "dev": "npm run clean && bundle exec jekyll serve"
  }
}

这个脚本会自动识别项目位置,清理 Jekyll 构建过程中生成的临时文件,确保项目从干净状态重新构建。

抱歉,评论功能暂时关闭!