#!/usr/pkg/bin/bash # # Update timestamps on blog/gopher posts or post caches # # License GPLv3 or later by slugmax@sdf.org # # Call with no args to force post timestamps back to those stored in # cached copies. # Call with -u to update the timestamp cache. # Call with -f to specify a single file to update # Call with -g to use gopher directories, rather than the default blog # directories. # gflag= uflag= fflag= while getopts 'guf:' OPTION do case $OPTION in g) gflag=1 ;; u) uflag=1 ;; f) fflag=1 fval="$OPTARG" ;; ?) printf "Usage: %s [-g] [-u] [-f filename]\n" $(basename $0) >&2 esac done shift $(($OPTIND - 1)) # Edit BLOGDIR and TSTAMPDIR to suit if [ "$gflag" ]; then BLOGDIR="$HOME/gopher/dat" TSTAMPDIR="$HOME/.gtstamps" else BLOGDIR="$HOME/html/motd/journal/entries" TSTAMPDIR="$HOME/.tstamps" fi if [ "$uflag" ]; then SRC="$BLOGDIR" DEST="$TSTAMPDIR" else SRC="$TSTAMPDIR" DEST="$BLOGDIR" fi if [ "$fflag" ]; then if [ ! "$uflag" ]; then # We are changing the timestamp on just one blog post file # from the cached timestamp, so both must exist if [ \( -e "$SRC/$fval" \) -a \( -e "$DEST/$fval" \) ]; then echo "Running touch -r $SRC/$fval $DEST/$fval" touch -r $SRC/$fval $DEST/$fval else echo "Either $SRC/$fval or $DEST/$fval does not exist, aborting" fi else # We are changing the timestamp on the cache, from the real # post file. So only the post file need exist. if [ -e "$SRC/$fval" ]; then echo "Running touch -r $SRC/$fval $DEST/$fval" touch -r $SRC/$fval $DEST/$fval else echo "$SRC/$fval does not exist, aborting" fi fi else # We didn't specify a file, so operate on all of the posts we can # find. Build a list of posts that we will use in the next step FILES=$(find $BLOGDIR -name '*txt' -print0 | xargs -0 | sed -e "s!$BLOGDIR/!!g") for POST in $FILES do if [ "$uflag" -a \( ! -e "$DEST/$POST" \) -a \( ! -d $(dirname $DEST/$POST) \) ]; then echo "Creating $(dirname $DEST/$POST)" mkdir -p $(dirname $DEST/$POST) fi echo "Running touch -r $SRC/$POST $DEST/$POST" touch -r $SRC/$POST $DEST/$POST done fi