v0.0.28 Functions, needs safeties and error handling for v0.1.0

This commit is contained in:
Skylar Grant 2024-06-09 22:30:58 -04:00
parent 82ea2f7b36
commit e9afba5675
1 changed files with 238 additions and 91 deletions

View File

@ -1,104 +1,253 @@
#!/bin/bash #!/bin/bash
###########################################################
######################################################################################
# Name: Camera Ingest Script # Name: Camera Ingest Script
# Author: voidf1sh (Skylar Grant) # Author: voidf1sh (Skylar Grant)
# Environment: M1 MacBook Pro # Environment: M1 MacBook Pro
# #
# Mounts: # Mounts:
# Camera SD: /Volumes/NO NAME # Camera SD: /dev/diskXsY (varies) -- /Volumes/NO NAME
# NAS: //GUEST:@192.168.0.2/media -- /Volumes/media or /Volumes/media-1 # NAS: //GUEST:@192.168.0.2/media -- /Volumes/media or /Volumes/media-1 (varies)
# #
# Git: https://git.vfsh.dev/voidf1sh/custom-scripts # Git: https://git.vfsh.dev/voidf1sh/custom-scripts
# File: cam-ingest-mac.sh # File: cam-ingest-mac.sh
# Version: 0.0.1 # Version: 0.0.28
########################################################### ######################################################################################
# Some initial variables to work with # Some initial variables to work with
# Set the date for folder creation # Set the date for folder creation
CURRENT_DATE=$(date +%F) CURRENT_DATE=$(date +%F)
# Paths
# IMPORTANT: Paths should NEVER have trailing slashes, and ALWAYS have leading slashes
# Camera's path to images
SD_SRC_PATH="/DCIM/100MSDCF" SD_SRC_PATH="/DCIM/100MSDCF"
MAC_INGEST_PATH="/Users/voidf1sh/Pictures/Camera Ingest" # Where to ingest to on the Mac
NAS_INGEST_PATH="/Camera Ingest" MAC_INGEST_PATH="$HOME/Pictures/Camera Ingest/$CURRENT_DATE"
# Where to ingest to on the NAS
NAS_INGEST_PATH="/Camera Ingest/$CURRENT_DATE"
# NAS Network Address
NAS_ADDRESS="//GUEST:@192.168.0.2/media"
# TODO: Move this to after initiating Mac->NAS Ingest ######################################################################################
# Check if the NAS is mounted # Functions
if mount | grep -q "//GUEST:@192.168.0.2/media"; then ######################################################################################
# Get the NAS mount point since it can vary
NAS_MOUNT_POINT=$(mount | grep "media" | awk '{print $3}' | grep -E '^/Volumes/media(-1)?$')
echo "NAS Mounted at $NAS_MOUNT_POINT."
else
echo "ERR: NAS Not mounted!"
exit
fi
# TODO: Maybe move this to after initiating SD->Mac Ingest # Create and open Mac folders.
# Check if the SD card is mounted create_folders_mac() {
if mount | grep -q "/Volumes/NO NAME"; then # Check if the parent ingest directory doesn't exist
# Get the SD Card mount point, this is static though if [[ ! -d "$MAC_INGEST_PATH" ]]; then
SD_MOUNT_POINT="/Volumes/NO NAME" echo "Creating ingest directories at $MAC_INGEST_PATH/{ARW,JPG,MP4}..."
echo "SD Card Mounted at $SD_MOUNT_POINT." # Since the parent doesn't exist, we create it and all children at once
else mkdir -p "$MAC_INGEST_PATH"/{ARW,JPG,MP4}
echo "ERR: SD Card Not mounted!" # $? is the exit status of the last commmand, with 0 being success
exit if [[ $? -eq 0 ]]; then
fi echo "Success!"
else
echo "Failed to create directories at $MAC_INGEST_PATH"
exit 1
fi
else
# The parent directory exists, but do the children?
echo "Parent ingest directory already exists. Checking for subdirectories..."
# Iterate over each folder name
for folder in ARW JPG MP4; do
# If the subdir doesn't exist
if [[ ! -d "$MAC_INGEST_PATH/$folder" ]]; then
echo "Subdirectory $folder is missing, creating..."
# Create the missing subdir
mkdir -p "$MAC_INGEST_PATH/$folder"
# $? is the exit status of the last commmand, with 0 being success
if [[ $? -eq 0 ]]; then
echo "Successfully created $MAC_INGEST_PATH/$folder"
else
echo "Failed to create $MAC_INGEST_PATH/$folder"
exit 1
fi
else
echo "$MAC_INGEST_PATH/$folder already exists."
fi
done
fi
}
# Initial Prompt # Create and open NAS folders.
# Bash allows for linebreaks in string literals and will create_folders_nas() {
# break lines accordingly in the shell # Check if the parent ingest directory doesn't exist
echo -e " if [[ ! -d "$NAS_MOUNT_POINT/$NAS_INGEST_PATH" ]]; then
[ Camera Ingest Script ] echo "Creating ingest directories at $NAS_INGEST_PATH/{ARW,JPG,MP4}..."
# Since the parent doesn't exist, we create it and all children at once
mkdir -p "$NAS_MOUNT_POINT/$NAS_INGEST_PATH"/{ARW,JPG,MP4}
# $? is the exit status of the last commmand, with 0 being success
if [[ $? -eq 0 ]]; then
echo "Success!"
else
echo "Failed to create directories at $NAS_MOUNT_POINT/$NAS_INGEST_PATH"
exit 1
fi
else
# The parent directory exists, but do the children?
echo "Parent ingest directory already exists. Checking for subdirectories..."
# Iterate over each folder name
for folder in ARW JPG MP4; do
# If the subdir doesn't exist
if [[ ! -d "$NAS_MOUNT_POINT/$NAS_INGEST_PATH/$folder" ]]; then
echo "Subdirectory $folder is missing, creating..."
# Create the missing subdir
mkdir -p "$NAS_MOUNT_POINT/$NAS_INGEST_PATH/$folder"
# $? is the exit status of the last commmand, with 0 being success
if [[ $? -eq 0 ]]; then
echo "Successfully created $NAS_MOUNT_POINT/$NAS_INGEST_PATH/$folder"
else
echo "Failed to create $NAS_MOUNT_POINT/$NAS_INGEST_PATH/$folder"
exit 1
fi
fi
done
fi
}
This script is being run from: '$(pwd)' # Cleanup non-RAW images on camera.
clean_sd() {
Please enter an option from below:
[1] Create and open folders.
[2] Cleanup non-RAW images on camera.
[3] Camera->Mac Ingest
[4] Mac->NAS Ingest
[0] Exit
"
# Wait for input
read -p " Option: " opt
# Execute the correct commands based on input.
case "$opt" in
1)
# Create and open folders.
clear
echo "Sike, this does nothing right now."
;;
2)
# Cleanup non-RAW images on camera.
clear
echo "Traversing to Camera..." echo "Traversing to Camera..."
cd "$SD_MOUNT_POINT/$SD_SRC_PATH" cd "$SD_MOUNT_POINT/$SD_SRC_PATH"
echo "Removing JPG files..." echo "Removing JPG files..."
rm *.JPG rm *.JPG
echo "Cleanup completed!" echo "Cleanup completed!"
cd - cd -
;; }
3)
# Camera->Mac Ingest
ingest_mac() {
# Check if the SD card is mounted
if mount | grep -q "/Volumes/NO NAME"; then
# Get the SD Card mount point, this is static though
SD_MOUNT_POINT="/Volumes/NO NAME"
echo "SD Card Mounted at $SD_MOUNT_POINT."
else
echo "ERR: SD Card Not mounted!"
exit 1
fi
create_folders_mac
echo "Beginning copy..."
# Copy JPG files
jpg_files=("$SD_MOUNT_POINT/$SD_SRC_PATH/"*.JPG)
if [[ -f "${jpg_files[0]}" ]]; then
echo "Copying JPGs..."
rsync -avzc --progress "$SD_MOUNT_POINT/$SD_SRC_PATH/"*.JPG "$MAC_INGEST_PATH/JPG/"
else
echo "No JPGs, skipping."
fi
# Copy ARW files
arw_files=("$SD_MOUNT_POINT/$SD_SRC_PATH/"*.ARW)
if [[ -f "${arw_files[0]}" ]]; then
echo "Copying ARWs..."
rsync -avzc --progress "$SD_MOUNT_POINT/$SD_SRC_PATH/"*.ARW "$MAC_INGEST_PATH/ARW/"
else
echo "No ARWs, skipping."
fi
# Copy MP4 files
mp4_files=("$SD_MOUNT_POINT/$SD_SRC_PATH/"*.MP4)
if [[ -f "${mp4_files[0]}" ]]; then
echo "Copying MP4s..."
rsync -avzc --progress "$SD_MOUNT_POINT/$SD_SRC_PATH/"*.MP4 "$MAC_INGEST_PATH/MP4/"
else
echo "No MP4s, skipping."
fi
echo "Ingest complete!"
open "$MAC_INGEST_PATH"
}
# Mac->NAS Ingest
ingest_nas() {
# Check if the NAS is mounted
if mount | grep -q "$NAS_ADDRESS"; then
# Get the NAS mount point since it can vary
NAS_MOUNT_POINT=$(mount | grep "$NAS_ADDRESS" | awk '{print $3}' | grep -E '^/Volumes/media(-1)?$')
echo "NAS Mounted at $NAS_MOUNT_POINT."
else
echo "ERR: NAS Not mounted!"
exit 1
fi
create_folders_nas
echo "Beginning copy..."
# Copy JPG files
jpg_files=("$MAC_INGEST_PATH/JPG/"*.JPG)
if [[ -f "${jpg_files[0]}" ]]; then
echo "Copying JPGs..."
rsync -avzc --progress "$MAC_INGEST_PATH/JPG/"*.JPG "$NAS_MOUNT_POINT/$NAS_INGEST_PATH/JPG/"
else
echo "No JPGs, skipping."
fi
# Copy ARW files
arw_files=("$MAC_INGEST_PATH/ARW/"*.ARW)
if [[ -f "${arw_files[0]}" ]]; then
echo "Copying ARWs..."
rsync -avzc --progress "$MAC_INGEST_PATH/ARW/"*.ARW "$NAS_MOUNT_POINT/$NAS_INGEST_PATH/ARW/"
else
echo "No ARWs, skipping."
fi
# Copy MP4 files
mp4_files=("$MAC_INGEST_PATH/MP4/"*.MP4)
if [[ -f "${mp4_files[0]}" ]]; then
echo "Copying MP4s..."
rsync -avzc --progress "$MAC_INGEST_PATH/MP4/"*.MP4 "$NAS_MOUNT_POINT/$NAS_INGEST_PATH/MP4/"
else
echo "No MP4s, skipping."
fi
echo "Ingest complete!"
open "$NAS_MOUNT_POINT/$NAS_INGEST_PATH"
}
######################################################################################
# Prompt Loop
######################################################################################
# Bash allows for linebreaks in string literals and will
# break lines accordingly in the shell
while true; do
echo ""
echo "[ Camera Ingest Script ]"
echo ""
echo "Please enter an option from below:"
echo ""
echo "[1] Camera->Mac Ingest"
echo "[2] Mac->NAS Ingest"
echo "[X] Cleanup non-RAW images on camera."
echo ""
echo "[0] Exit"
# Wait for input
read -p "Option: " opt
# Execute the correct commands based on input.
case "$opt" in
1)
# Camera->Mac Ingest # Camera->Mac Ingest
clear clear
echo "Beginning copy..." ingest_mac
echo "Copying JPGs..."
rsync -avz --progress "$SD_MOUNT_POINT$SD_SRC_PATH/"*.JPG "$MAC_INGEST_PATH/JPG/"
echo "Copying ARWs..."
rsync -avz --progress "$SD_MOUNT_POINT$SD_SRC_PATH/"*.ARW "$MAC_INGEST_PATH/ARW/"
echo "Ingest complete!"
open $MAC_INGEST_PATH
;; ;;
4) 2)
# Mac->NAS Ingest # Mac->NAS Ingest
clear
ingest_nas
;;
3)
# Cleanup non-RAW images on camera.
clear
echo "Temporarily disabled!"
# clean_sd
;; ;;
0) 0)
# Exit the script # Exit the script
echo "!! Quitting !!" echo "!! Quitting !!"
sleep 0.4s sleep 0.8s
clear clear
exit exit
;; ;;
@ -106,7 +255,5 @@ case "$opt" in
clear clear
echo "!! Invalid Option !!" echo "!! Invalid Option !!"
;; ;;
esac esac
done
# Loop the script
exec ./backup.sh