Skip to content

Snapshot Script Usage

This script captures snapshots of your project files into Markdown and copies them to the clipboard (when on mac).

Quick Start

  1. Make the script executable:
    chmod +x printify.sh
    
  2. Run it from your project root:
    ./printify.sh
    
  3. Find the snapshot in snapshots/data-N.md and in your clipboard.

Configuration

  • INCLUDE_EXTENSIONS: file types to include (default: py, md, sh, txt).
  • IGNORE_DIRS: directories to skip (default: snapshots, .venv, .git).
  • IGNORE_PATTERNS: filename patterns to skip (default: *.pyc, .env*).

Script

Show full script
#!/usr/bin/env bash
set -euo pipefail

#
# ─── USER CONFIGURATION ────────────────────────────────────────────────────────
#

# Which file extensions to snapshot? (no leading dot; leave empty for “all”)
INCLUDE_EXTENSIONS=(py md txt)

# Directories to skip entirely
IGNORE_DIRS=(snapshots .venv .git)

# Filename-patterns to skip (globs)
IGNORE_PATTERNS=('*.pyc' '.env*')

# This script’s filename (so we don’t snapshot ourselves)
SELF_SCRIPT="$(basename "$0")"

#
# ─── PLATFORM DETECTION ────────────────────────────────────────────────────────
#
OS="$(uname -s)"
if [[ "$OS" == "Darwin" ]]; then
CLIP_MODE="pbcopy-only"
elif [[ "$OS" == "Linux" ]] && grep -qE '^ID=debian' /etc/os-release && grep -qE 'VERSION_ID="12"' /etc/os-release; then
CLIP_MODE="auto"    # Debian 12 “remote”
else
CLIP_MODE="auto"
echo "⚠️  Unrecognized OS or distro—using generic clipboard‐auto mode." >&2
fi

#
# ─── PREPARE SNAPSHOT & INDEX ─────────────────────────────────────────────────
#
mkdir -p snapshots

# Always use nullglob so “no snapshots yet” doesn’t break
shopt -s nullglob
last=0
for f in snapshots/data-*.md; do
num="${f##*data-}"
num="${num%.md}"
# only update if it’s a number
if [[ "$num" =~ ^[0-9]+$ ]] && (( num > last )); then
    last=$num
fi
done
shopt -u nullglob

next=$(( last + 1 ))
outfile="snapshots/data-$next.md"

#
# ─── BUILD find ARGUMENTS ─────────────────────────────────────────────────────
#

# 1) prune list
prune_args=()
for d in "${IGNORE_DIRS[@]}"; do
prune_args+=( -path "./$d" -prune -o )
done
# drop trailing -o
unset 'prune_args[${#prune_args[@]}-1]'

# 2) extensions filter
ext_args=()
if (( ${#INCLUDE_EXTENSIONS[@]} )); then
for ext in "${INCLUDE_EXTENSIONS[@]}"; do
    ext_args+=( -iname "*.${ext}" -o )
done
unset 'ext_args[${#ext_args[@]}-1]'
else
ext_args=( -true )
fi

# 3) extra patterns + this script
pattern_args=()
for pat in "${IGNORE_PATTERNS[@]}"; do
pattern_args+=( ! -name "$pat" )
done
pattern_args+=( ! -name "$SELF_SCRIPT" )

#
# ─── DUMP SNAPSHOT ─────────────────────────────────────────────────────────────
#
{
echo '```'
if command -v tree &>/dev/null; then
    tree -I "$(IFS='|'; echo "${IGNORE_DIRS[*]}" "${IGNORE_PATTERNS[*]}" "$SELF_SCRIPT")"
else
    find . "${prune_args[@]}" -prune -o -type f -print | sed 's|^\./||'
fi
echo '```'
echo

find . \
    "${prune_args[@]}" -prune -o \
    -type f \
    \( "${ext_args[@]}" \) \
    "${pattern_args[@]}" \
    -print0 \
| sort -z \
| while IFS= read -r -d '' file; do
    echo "## ${file#./}"
    cat "$file"
    echo
    done
} > "$outfile"

echo "✅ Saved snapshot to $outfile"

#
# ─── COPY TO CLIPBOARD ───────────────────────────────────────────────────────────
#
copy_osc52() {
local b64
b64=$(base64 < "$1" | tr -d '\n')
printf "\e]52;c;%s\a" "$b64"
}

if [[ "$CLIP_MODE" == "pbcopy-only" ]]; then
if command -v pbcopy &>/dev/null; then
    pbcopy < "$outfile" && echo "Copied via pbcopy."
else
    echo "⚠️ pbcopy not found; copy $outfile manually."
fi
else
if command -v pbcopy &>/dev/null; then
    pbcopy < "$outfile" && echo "Copied via pbcopy."
elif command -v xclip &>/dev/null; then
    if xclip -selection clipboard < "$outfile"; then
    echo "Copied via xclip."
    else
    echo "🔄 xclip failed; using OSC52."
    copy_osc52 "$outfile" && echo "Copied via OSC52."
    fi
elif command -v xsel &>/dev/null; then
    if xsel --clipboard --input < "$outfile"; then
    echo "Copied via xsel."
    else
    echo "🔄 xsel failed; using OSC52."
    copy_osc52 "$outfile" && echo "Copied via OSC52."
    fi
elif [[ -n "${SSH_CONNECTION:-}" && -t 1 ]]; then
    copy_osc52 "$outfile" && echo "Copied via OSC52 over SSH."
else
    echo "⚠️  No clipboard tool found—install pbcopy, xclip, or xsel."
fi
fi