本文目录导读:

#!/bin/bash
# Hugo 缓存清理脚本
# 使用: bash clean-hugo-cache.sh
echo "========================================"
echo " Hugo 缓存与生成文件清理工具"
echo "========================================"
# 1. 清理 Hugo 默认缓存目录
CACHE_DIR="$HOME/.cache/hugo"
if [ -d "$CACHE_DIR" ]; then
echo "📁 删除 Hugo 缓存目录: $CACHE_DIR"
rm -rf "$CACHE_DIR"
echo "✅ 缓存已清除"
else
echo "ℹ️ 缓存目录不存在: $CACHE_DIR"
fi
# 2. 清理当前目录下的生成文件
GENERATED_DIRS=("public" "resources" "_vendor")
for dir in "${GENERATED_DIRS[@]}"; do
if [ -d "$dir" ]; then
echo "📁 删除目录: $dir"
rm -rf "$dir"
echo "✅ 已删除 $dir"
else
echo "ℹ️ 目录不存在: $dir"
fi
done
# 3. 清理 Hugo 临时文件
TEMP_FILES=("hugo.lock" ".hugo_build.lock")
for file in "${TEMP_FILES[@]}"; do
if [ -f "$file" ]; then
echo "📄 删除文件: $file"
rm -f "$file"
echo "✅ 已删除 $file"
else
echo "ℹ️ 文件不存在: $file"
fi
done
echo ""
echo "========================================"
echo " ✅ 清理完成"
echo " 下次运行 hugo 将重新生成所有文件"
echo "========================================"
使用方法
创建脚本文件
# 创建文件并粘贴上述脚本内容 nano clean-hugo-cache.sh
添加执行权限
chmod +x clean-hugo-cache.sh
运行脚本
# 在 Hugo 项目根目录运行 ./clean-hugo-cache.sh
高级版本(带确认和选项)
#!/bin/bash
# Hugo 高级缓存清理脚本
VERSION="1.0.0"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
print_usage() {
echo "用法: $0 [选项]"
echo "选项:"
echo " -y, --yes 直接执行,跳过确认"
echo " -v, --verbose 显示详细信息"
echo " -d, --dry-run 模拟运行,不实际删除"
echo " -h, --help 显示帮助信息"
}
VERBOSE=false
DRY_RUN=false
SKIP_CONFIRM=false
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
-y|--yes)
SKIP_CONFIRM=true
shift
;;
-v|--verbose)
VERBOSE=true
shift
;;
-d|--dry-run)
DRY_RUN=true
shift
;;
-h|--help)
print_usage
exit 0
;;
*)
echo "未知选项: $1"
print_usage
exit 1
;;
esac
done
echo -e "${YELLOW}========================================"
echo " Hugo 缓存清理工具 v$VERSION"
echo -e "========================================${NC}"
# 显示将要删除的内容
if [ "$VERBOSE" = true ]; then
echo ""
echo "将要清理的项目:"
echo " - Hugo 缓存目录: ~/.cache/hugo"
echo " - 生成目录: public/ resources/ _vendor/"
echo " - 临时文件: hugo.lock .hugo_build.lock"
fi
# 确认操作
if [ "$SKIP_CONFIRM" = false ] && [ "$DRY_RUN" = false ]; then
echo ""
read -p "确认清理所有缓存?(y/N): " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}操作已取消${NC}"
exit 0
fi
fi
# 执行清理
clean_item() {
local item=$1
local path=$2
if [ -e "$path" ]; then
if [ "$DRY_RUN" = true ]; then
echo -e "${YELLOW}[DRY RUN] 将删除: $path${NC}"
else
rm -rf "$path"
echo -e "${GREEN}已删除: $path${NC}"
fi
else
if [ "$VERBOSE" = true ]; then
echo -e "跳过不存在: $path"
fi
fi
}
echo ""
echo "开始清理..."
# 清理 Hugo 缓存
clean_item "Hugo缓存" "$HOME/.cache/hugo"
# 清理生成目录
for dir in "public" "resources" "_vendor"; do
clean_item "生成目录" "$(pwd)/$dir"
done
# 清理临时文件
for file in "hugo.lock" ".hugo_build.lock"; do
clean_item "临时文件" "$(pwd)/$file"
done
echo ""
if [ "$DRY_RUN" = true ]; then
echo -e "${YELLOW}模拟运行完成,没有实际删除文件${NC}"
else
echo -e "${GREEN}清理完成!${NC}"
echo "下次运行 hugo 将重新生成所有文件"
fi
自动清理(Cron 定时任务)
如果你想要自动定期清理 Hugo 缓存:
# 编辑 crontab crontab -e # 添加以下行(每周日凌晨 3 点清理) 0 3 * * 0 /path/to/clean-hugo-cache.sh -y >> /dev/null 2>&1
注意事项
- 备份重要文件:确保
public/目录下的自定义内容已备份 - 主题缓存:如果使用 Git 子模块的主题,
_vendor目录的清理不会影响主题文件 - Docker 环境:如果在 Docker 中使用,可能需要同时清理 Docker 卷中的缓存
这个脚本不会影响你的源文件(content/, themes/, config.toml 等)。