Files
masterthesis-playground/convert_jupytext.sh
2025-10-20 23:06:52 +02:00

65 lines
1.5 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'EOF'
Usage:
jupytext_convert.sh to-py # Convert all *.ipynb -> nb_*.py (py:percent)
jupytext_convert.sh to-ipynb # Convert all nb_*.py -> *.ipynb
Notes:
- Skips .ipynb_checkpoints.
- Output .py files are prefixed with "nb_" so you can filter with nb_*.py.
- Requires 'jupytext' in PATH (pip install jupytext).
EOF
}
require_jupytext() {
if ! command -v jupytext >/dev/null 2>&1; then
echo "Error: jupytext not found in PATH. Install with 'pip install jupytext'." >&2
exit 1
fi
}
to_py() {
echo "Converting *.ipynb -> nb_*.py (py:percent)..."
# Find notebooks, skip .ipynb_checkpoints
find . -type f -name "*.ipynb" ! -path "*/.ipynb_checkpoints/*" -print0 |
while IFS= read -r -d '' nb; do
dir=$(dirname "$nb")
base=$(basename "$nb" .ipynb)
out="$dir/nb_${base}.py"
echo " - $nb -> $out"
jupytext --to py:percent -o "$out" "$nb"
done
echo "Done."
}
to_ipynb() {
echo "Converting nb_*.py -> *.ipynb..."
find . -type f -name "nb_*.py" -print0 |
while IFS= read -r -d '' py; do
dir=$(dirname "$py")
base=$(basename "$py" .py)
# Strip the nb_ prefix when producing the .ipynb filename
bare="${base#nb_}"
out="$dir/${bare}.ipynb"
echo " - $py -> $out"
jupytext --to ipynb -o "$out" "$py"
done
echo "Done."
}
main() {
[[ $# -eq 1 ]] || { usage; exit 1; }
require_jupytext
case "$1" in
py) to_py ;;
nb) to_ipynb ;;
-h|--help) usage ;;
*) echo "Unknown command: $1"; usage; exit 1 ;;
esac
}
main "$@"