100 lines
No EOL
3.9 KiB
Bash
Executable file
100 lines
No EOL
3.9 KiB
Bash
Executable file
#!/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" |