#!/usr/bin/env bash set -euxo pipefail usage () { echo "Recursively imports all gpx tracks in a directory into an SQLite database." echo "" echo "Usage: $(basename $0) directory target-database" } gpx_directory="$1" target_database="$2" # basic argument verification case "$@" in -h|--help) usage && exit 0;; esac [ -z "$gpx_directory" ] && usage && exit 1 [ -z "$target_database" ] && usage && exit 1 # we write to a temporary location to make the replace option atomic (if on the same device) tmp_dir="$(mktemp -d diogenes.XXXXX -p /tmp)" tmp="$tmp_dir/$(basename $target_database)" # recursive scan and import while IFS= read -d '' -r file; do spatialite_xml_load -d "$tmp" -x "$file" done < <(find "$gpx_directory" -name '*.gpx' -print0) mv -f "$tmp" "$target_database" rm -rf "$tmp_dir" # TODO: Create virtual joined table