-#!/bin/bash
-# Desc: Checks that a valid tar archive exists, creates one otherwise
-
-#===BEGIN Declare local script functions===
-yell() { echo "$0: $*" >&2; } #o Yell, Die, Try Three-Fingered Claw technique
-die() { yell "$*"; exit 111; } #o Ref/Attrib: https://stackoverflow.com/a/25515370
-try() { "$@" || die "cannot $*"; } #o
-checkMakeTar() {
- # Desc: Checks that a valid tar archive exists, creates one otherwise
- # Usage: checkMakeTar [ path ]
- # Version: 1.0.2
- # Input: arg1: path of tar archive
- # Output: exit code 0 : tar readable
- # exit code 1 : tar missing; created
- # exit code 2 : tar not readable; moved; replaced
- # Depends: bash 5, date 8, tar 1, try()
- local pathTar returnFlag0 returnFlag1 returnFlag2
- pathTar="$1";
-
- # Check if file is a valid tar archive
- if tar --list --file="$pathTar" 1>/dev/null 2>&1; then
- ## T1: return success
- returnFlag0="tar valid";
- else
- ## F1: Check if file exists
- if [[ -f "$pathTar" ]]; then
- ### T: Rename file
- try mv "$pathTar" "$pathTar""--broken--""$(date +%Y%m%dT%H%M%S)" && \
- returnFlag1="tar moved";
- else
- ### F: -
- :
- fi;
- ## F2: Create tar archive, return 0
- try tar --create --file="$pathTar" --files-from=/dev/null && \
- returnFlag2="tar created";
- fi;
-
- # Determine function return code
- if [[ "$returnFlag0" = "tar valid" ]]; then
- return 0;
- elif [[ "$returnFlag2" = "tar created" ]] && ! [[ "$returnFlag1" = "tar moved" ]]; then
- return 1; # tar missing so created
- elif [[ "$returnFlag2" = "tar created" ]] && [[ "$returnFlag1" = "tar moved" ]]; then
- return 2; # tar not readable so moved; replaced
- fi;
-} # checks if arg1 is tar; creates one otherwise
-#===END Declare local script functions===
-
-#====BEGIN sample code====
-#myFile="/tmp/$(date +%s)..tar"
-myFile="/tmp/$(date +%Y%m%d).tar"
-if [[ -f "$myFile" ]]; then yell "$myFile already exists."; else yell "$myFile doesn't yet exist."; fi
-if checkMakeTar "$myFile"; then
- yell "checkMakeTar() function run and exited:$?";
-else
- yell "checkMakeTar() function run and exited:$?";
-fi
-
-if [[ -f "$myFile" ]]; then
- yell "Now exists :$myFile";
- ls -l "$myFile";
-else
- yell "Does not exist:$myFile";
- ls -l "$myFile";
-fi
-#====END sample code====
-
-# Author: Steven Baltakatei Sandoval
-# License: GPLv3+