forked from HPR/hpr-tools
		
	Updates for show "repair" processing
InternetArchive/future_upload: Added logging and debugging
InternetArchive/ia_db.sql: Added new tables
InternetArchive/recover_transcripts: New script to run on 'borg' and
    copy missing files from the backup disk to the IA
InternetArchive/repair_assets: More comments, including one about a bug in the design.
InternetArchive/repair_item: Fix relating to octal numbers (if there are
    leading zeroes in a number). '_DEBUG' is now in the function
    library. Added comments to explain obscure stuff.
InternetArchive/snapshot_metadata: New Bash script (to run on my
    desktop) which collects metadata for a show and stores in in the
    '~/HPR/IA/assets' directory. Runs 'view_derivatives' on it to find
    derivative files for deletion.
InternetArchive/tidy_uploaded: Moves files and directories containing
    uploaded files into a holding area for later backup. Added
    debugging, logging and a 'force' mode.
InternetArchive/upload_manager: Manages 'ia.db' (on my workstation).
    Needs many updates which have just started to be added.
InternetArchive/weekly_upload: Old script, now obsolete.
			
			
This commit is contained in:
		| @@ -13,15 +13,15 @@ | ||||
| #         BUGS: --- | ||||
| #        NOTES: --- | ||||
| #       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com | ||||
| #      VERSION: 0.0.10 | ||||
| #      VERSION: 0.0.11 | ||||
| #      CREATED: 2022-03-30 17:38:01 | ||||
| #     REVISION: 2022-07-30 14:30:43 | ||||
| #     REVISION: 2024-07-29 18:24:26 | ||||
| # | ||||
| #=============================================================================== | ||||
|  | ||||
| set -o nounset                              # Treat unset variables as an error | ||||
|  | ||||
| VERSION="0.0.10" | ||||
| VERSION="0.0.11" | ||||
|  | ||||
| SCRIPT=${0##*/} | ||||
| # DIR=${0%/*} | ||||
| @@ -55,6 +55,8 @@ case $HOSTNAME in | ||||
|     *)          echo "Wrong host!"; exit 1 ;; | ||||
| esac | ||||
|  | ||||
| # {{{ -- Functions -- exists_in, queued_tasks, movefile, is_empty, _log, _usage | ||||
|  | ||||
| #===  FUNCTION  ================================================================ | ||||
| #         NAME: exists_in | ||||
| #  DESCRIPTION: Checks the existence of a key in an associative array | ||||
| @@ -99,9 +101,12 @@ queued_tasks () { | ||||
| #      RETURNS: True if a move was done, otherwise False | ||||
| #=============================================================================== | ||||
| movefile () { | ||||
|     local fromdir="${1:?Usage: movefile fromdir todir path}" | ||||
|     local todir="${2:?Usage: movefile fromdir todir path}" | ||||
|     local path="${3:?Usage: movefile fromdir todir path}" | ||||
|     local fromdir="${1:?Usage: movefile fromdir todir path [FORCE]}" | ||||
|     local todir="${2:?Usage: movefile fromdir todir path [FORCE]}" | ||||
|     local path="${3:?Usage: movefile fromdir todir path [FORCE]}" | ||||
|     local FORCE="${4:-0}" | ||||
|  | ||||
|     [[ ! -v FORCE ]] && FORCE=0 | ||||
|  | ||||
|     # | ||||
|     # Chop up the path. If it's just a file name then $dir and $file are the | ||||
| @@ -126,8 +131,16 @@ movefile () { | ||||
|     # TODO: Compare the two files? | ||||
|     # | ||||
|     if [[ -e $todir/$path ]]; then | ||||
|         echo "File already exists: $todir/$path" | ||||
|         return 1 | ||||
|         if [[ $FORCE -eq 1 ]]; then | ||||
|             echo "File exists: $todir/$path" | ||||
|             echo "FORCE mode is ON so overwriting" | ||||
|             mv --force "$fromdir/$path" "$todir/$path" | ||||
|             echo "Moved $fromdir/$path" | ||||
|             return 0 | ||||
|         else | ||||
|             echo "File already exists: $todir/$path" | ||||
|             return 1 | ||||
|         fi | ||||
|     else | ||||
|         mv "$fromdir/$path" "$todir/$path" | ||||
|         echo "Moved $fromdir/$path" | ||||
| @@ -147,16 +160,28 @@ is_empty() { | ||||
| } | ||||
|  | ||||
| #===  FUNCTION  ================================================================ | ||||
| #         NAME: _DEBUG | ||||
| #  DESCRIPTION: Writes a message if in DEBUG mode | ||||
| #   PARAMETERS: List of messages | ||||
| #         NAME: _log | ||||
| #  DESCRIPTION: Writes a log record to the predefined $LOGFILE in this script | ||||
| #               using the predefined $LOGREC, a template for 'printf'. If the | ||||
| #               latter is not defined the function will use a default. | ||||
| #               For some reason 'shellcheck' objects to this function. The | ||||
| #               first argument to 'printf' needs to be -1 to make the | ||||
| #               '%(fmt)T' use today's date and time. | ||||
| #   PARAMETERS: 1 - the message to write | ||||
| #      RETURNS: Nothing | ||||
| #=============================================================================== | ||||
| _DEBUG () { | ||||
|     [ "$DEBUG" == 0 ] && return | ||||
|     for msg in "$@"; do | ||||
|         printf 'D> %s\n' "$msg" | ||||
|     done | ||||
| # shellcheck disable=SC2317 disable=SC2059 | ||||
| _log () { | ||||
|     local msg="$1" | ||||
|  | ||||
| #     echo "D> $LOGFILE $LOGREC" | ||||
|     [ -v LOGFILE ] || { echo "${FUNCNAME[0]}: \$LOGFILE is not defined"; exit 1; } | ||||
|     [ -v LOGREC ] || { local LOGREC='%(%F %T)T %s\n'; } | ||||
|  | ||||
| #     echo "D> $LOGFILE $LOGREC" | ||||
|     printf "$LOGREC" -1 "$msg" >> "$LOGFILE" | ||||
|  | ||||
|     return | ||||
| } | ||||
|  | ||||
| #===  FUNCTION  ================================================================ | ||||
| @@ -189,6 +214,11 @@ Options: | ||||
|                         to stop at. | ||||
|   -D                    Run in debug mode where a lot more information is | ||||
|                         reported | ||||
|   -F                    Turn on FORCE mode (normally off). In this mode when | ||||
|                         the files being tidied (moved) already exist, they are | ||||
|                         overwritten. This is for the very rare case when | ||||
|                         a show's audio has to be re-uploaded because of bad | ||||
|                         audio or the wrong file being sent. | ||||
|  | ||||
| Examples | ||||
|     ./tidy_uploaded             # Run in (default) dry-run mode | ||||
| @@ -196,11 +226,14 @@ Examples | ||||
|     ./tidy_uploaded -d0         # Live mode (without verbose messages) | ||||
|     ./tidy_uploaded -c1         # Process 1 show in dry-run mode | ||||
|     ./tidy_uploaded -D          # Run with debugging enabled | ||||
|     ./tidy_uploaded -F          # Run with FORCE mode on | ||||
|  | ||||
| endusage | ||||
|     exit "$res" | ||||
| } | ||||
|  | ||||
| # }}} | ||||
|  | ||||
| #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| # | ||||
| @@ -208,16 +241,18 @@ endusage | ||||
| # | ||||
| LOGS="$BASEDIR/logs" | ||||
| LOGFILE="$LOGS/$SCRIPT.log" | ||||
| LOGREC='%(%F %T)T %s\n' | ||||
|  | ||||
| # | ||||
| # Process options | ||||
| # | ||||
| while getopts :c:d:Dhv opt | ||||
| while getopts :c:d:DFhv opt | ||||
| do | ||||
|     case "${opt}" in | ||||
|         c) COUNT=$OPTARG;; | ||||
|         D) DEBUG=1;; | ||||
|         d) DRYRUN=$OPTARG;; | ||||
|         F) FORCE=1;; | ||||
|         h) _usage 0;; | ||||
|         v) VERBOSE=1;; | ||||
|         *) echo "** Unknown option" | ||||
| @@ -239,6 +274,9 @@ if [[ $DRYRUN -ne 0 && $DRYRUN -ne 1 ]]; then | ||||
| fi | ||||
| [[ $DRYRUN -eq 1 ]] && echo "Dry run mode" | ||||
|  | ||||
| FORCE=${FORCE:-0} | ||||
| [[ $FORCE -eq 1 ]] && echo "Force mode - overwriting existing files" | ||||
|  | ||||
| VERBOSE=${VERBOSE:-0} | ||||
|  | ||||
| DEBUG=${DEBUG:-0} | ||||
| @@ -361,12 +399,17 @@ while read -r path; do | ||||
|                     # | ||||
|                     # A file on the IA exists in the upload area. Move the | ||||
|                     # local one if we're not in dry-run mode, otherwise just | ||||
|                     # report the move we would do. | ||||
|                     # report the move we would do. If FORCE mode is on | ||||
|                     # overwrite the file. | ||||
|                     # | ||||
|                     if [[ $DRYRUN -eq 0 ]]; then | ||||
|                         movefile "$UPLOADS" "$ARCHIVE" "$file" && ((moves++)) | ||||
|                         movefile "$UPLOADS" "$ARCHIVE" "$file" "$FORCE" && ((moves++)) | ||||
|                     else | ||||
|                         printf 'Would move %s\n\tto %s\n' "$frompath" "$topath" | ||||
|                         if [[ $FORCE -eq 0 ]]; then | ||||
|                             printf 'Would move %s\n\tto %s\n' "$frompath" "$topath" | ||||
|                         else | ||||
|                             printf 'Would move %s\n\toverwriting %s\n' "$frompath" "$topath" | ||||
|                         fi | ||||
|                     fi | ||||
|                 fi | ||||
|             done < "$TMP1" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user