本文目录导读:

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' 重新构建项目"
使用方法
-
保存脚本:
# 将脚本保存到 Jekyll 项目根目录 nano clean-jekyll-cache.sh # 粘贴脚本内容后保存
-
添加执行权限:
chmod +x clean-jekyll-cache.sh
-
运行脚本:
./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
注意事项
- 备份: _site 目录包含手动修改的文件,请先备份
- Gemfile.lock: 清理需要重新运行
bundle install - Git 忽略: 确保这些缓存目录已在
.gitignore中配置
集成到工作流
可以作为 npm 脚本或 make 命令集成:
// package.json
{
"scripts": {
"clean": "bash clean-jekyll-cache.sh -y",
"dev": "npm run clean && bundle exec jekyll serve"
}
}
这个脚本会自动识别项目位置,清理 Jekyll 构建过程中生成的临时文件,确保项目从干净状态重新构建。