Knowledge Base

Preserving for the future: Shell scripts, AoC, and more

make-zips-from-sword-dir.sh (Source)

#!/bin/sh
# File: generate-zips-from-sword-dir.sh
# Location: server3:/mnt/mirror/sword
# Author: bgstack15
# Startdate: 2024-06-06-5 17:21
# SPDX-License-Identifier: GPL-3.0-only
# Title: Generate Zips from Existing .Sword Dir
# Purpose: convert a .sword dir back into modules for loading into my sword library
# History:
# Usage: Use when I am converting an existing .sword dir to set of modules for the repo.
# Reference:
#    https://serverfault.com/questions/108024/silent-7za-compression/827833#827833
# Improve:
# Dependencies:
#    7za
# Documentation: /mnt/public/Support/Programs/BibleTimeMini/sword-repo-readme.md
SWORD_DIR="${SWORD_DIR:-$( dirname $( readlink -f "${0}" ) )}"
OUTDIR="${OUTDIR:-${SWORD_DIR}}"
cd "${SWORD_DIR}"
{ test ! -d mods.d || test ! -d modules ; } && {
   echo "Error: this is not a sword directory. Aborted." 1>&2
   exit 1
}
for mod in mods.d/*.conf ;
do
   mod_name="$( grep -h -E '^\s*\[' "${mod}" | head -n1 | tr -d '[]\r' )"
   datapath="$( awk -F'=' '$1~/DataPath/{print $2}' "${mod}" | sed -r -e 's@^\.\/@@;' )"
    # OpenHymnal has an incorrect DataPath so drilling up solves that.
   _x=0
   _max=4
   while { ! test -e "${datapath}" && test $_x -lt $_max ; } ; do datapath="$( dirname "${datapath}" )" ; echo "For ${mod}, checking ${datapath}" 1>&2 ; _x=$((_x+1)) ; done ;
   #test $_x -ge $_max && { echo "Cannot build ${mod_name}.zip because datapath is broken. Skipping..." 1>&2 ; continue ;}
   echo "${mod_name}.zip" "${mod}" "${datapath}"
   7za -bsp0 -bso0 a "${OUTDIR%%/}/${mod_name}.zip" "${mod}" "${datapath}"
done