website-htmx-rustelo-code/scripts/content/review/organize-frontmatter.sh

100 lines
3.9 KiB
Bash
Raw Permalink Normal View History

2026-07-10 03:44:13 +01:00
#!/bin/bash
# Script to reorganize frontmatter according to standard industry practice
# Groups fields logically: Post metadata, Publication info, Categorization, Display
set -e
echo "🔄 Organizing frontmatter according to standard industry practice..."
# Function to reorganize frontmatter in a markdown file
organize_frontmatter() {
local md_file="$1"
if [[ ! -f "$md_file" ]]; then
return 0
fi
echo "📝 Organizing: $md_file"
# Find frontmatter boundaries
local frontmatter_end=$(grep -n "^---$" "$md_file" | sed -n '2p' | cut -d: -f1)
if [[ -z "$frontmatter_end" ]]; then
echo " ⚠️ No frontmatter found, skipping"
return 0
fi
# Create backup
cp "$md_file" "$md_file.organized.backup"
# Extract frontmatter content (between the --- markers)
local frontmatter_content=$(sed -n '2,'$((frontmatter_end-1))'p' "$md_file")
# Extract values using grep
local id=$(echo "$frontmatter_content" | grep '^id:' || echo "")
local title=$(echo "$frontmatter_content" | grep '^title:' || echo "")
local slug=$(echo "$frontmatter_content" | grep '^slug:' || echo "")
local subtitle=$(echo "$frontmatter_content" | grep '^subtitle:' || echo "")
local excerpt=$(echo "$frontmatter_content" | grep '^excerpt:' || echo "")
local author=$(echo "$frontmatter_content" | grep '^author:' || echo "")
local date=$(echo "$frontmatter_content" | grep '^date:' || echo "")
local published=$(echo "$frontmatter_content" | grep '^published:' || echo "")
local featured=$(echo "$frontmatter_content" | grep '^featured:' || echo "")
local category=$(echo "$frontmatter_content" | grep '^category:' || echo "")
local tags=$(echo "$frontmatter_content" | grep '^tags:' || echo "")
local read_time=$(echo "$frontmatter_content" | grep '^read_time:' || echo "")
local sort_order=$(echo "$frontmatter_content" | grep '^sort_order:' || echo "")
local css_class=$(echo "$frontmatter_content" | grep '^css_class:' || echo "")
local css_style=$(echo "$frontmatter_content" | grep '^css_style:' || echo "")
local category_description=$(echo "$frontmatter_content" | grep '^category_description:' || echo "")
local category_published=$(echo "$frontmatter_content" | grep '^category_published:' || echo "")
# Create new organized frontmatter
{
echo "---"
echo "# Post metadata"
[[ -n "$id" ]] && echo "$id"
[[ -n "$title" ]] && echo "$title"
[[ -n "$slug" ]] && echo "$slug"
[[ -n "$subtitle" ]] && echo "$subtitle"
[[ -n "$excerpt" ]] && echo "$excerpt"
echo ""
echo "# Publication info"
[[ -n "$author" ]] && echo "$author"
[[ -n "$date" ]] && echo "$date"
[[ -n "$published" ]] && echo "$published"
[[ -n "$featured" ]] && echo "$featured"
echo ""
echo "# Categorization"
[[ -n "$category" ]] && echo "$category"
[[ -n "$tags" ]] && echo "$tags"
echo ""
echo "# Display"
[[ -n "$read_time" ]] && echo "$read_time"
[[ -n "$sort_order" ]] && echo "$sort_order"
[[ -n "$css_class" ]] && echo "$css_class"
[[ -n "$css_style" ]] && echo "$css_style"
[[ -n "$category_description" ]] && echo "$category_description"
[[ -n "$category_published" ]] && echo "$category_published"
echo "---"
# Add the rest of the file content
tail -n +$((frontmatter_end+1)) "$md_file"
} > "$md_file.tmp"
mv "$md_file.tmp" "$md_file"
echo " ✅ Organized with standard industry format"
}
# Process all markdown files
find site/content -name "*.md" -type f | while read -r md_file; do
organize_frontmatter "$md_file"
done
echo "✅ Frontmatter organization completed!"
echo "📋 Backup files created with .organized.backup extension"