diff --git a/cam-ingest-mac.sh b/cam-ingest-mac.sh index 2058e1c..ce6de02 100755 --- a/cam-ingest-mac.sh +++ b/cam-ingest-mac.sh @@ -1,112 +1,259 @@ #!/bin/bash -########################################################### + +###################################################################################### # Name: Camera Ingest Script # Author: voidf1sh (Skylar Grant) # Environment: M1 MacBook Pro # # Mounts: -# Camera SD: /Volumes/NO NAME -# NAS: //GUEST:@192.168.0.2/media -- /Volumes/media or /Volumes/media-1 +# Camera SD: /dev/diskXsY (varies) -- /Volumes/NO NAME +# NAS: //GUEST:@192.168.0.2/media -- /Volumes/media or /Volumes/media-1 (varies) # # Git: https://git.vfsh.dev/voidf1sh/custom-scripts # File: cam-ingest-mac.sh -# Version: 0.0.1 -########################################################### +# Version: 0.0.28 +###################################################################################### # Some initial variables to work with # Set the date for folder creation 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" -MAC_INGEST_PATH="/Users/voidf1sh/Pictures/Camera Ingest" -NAS_INGEST_PATH="/Camera Ingest" +# Where to ingest to on the Mac +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 -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 +###################################################################################### +# Functions +###################################################################################### -# TODO: Maybe move this to after initiating SD->Mac Ingest -# 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 -fi +# Create and open Mac folders. +create_folders_mac() { + # Check if the parent ingest directory doesn't exist + if [[ ! -d "$MAC_INGEST_PATH" ]]; then + echo "Creating ingest directories at $MAC_INGEST_PATH/{ARW,JPG,MP4}..." + # Since the parent doesn't exist, we create it and all children at once + mkdir -p "$MAC_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 $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 +} + +# Create and open NAS folders. +create_folders_nas() { + # Check if the parent ingest directory doesn't exist + if [[ ! -d "$NAS_MOUNT_POINT/$NAS_INGEST_PATH" ]]; then + 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 +} + +# Cleanup non-RAW images on camera. +clean_sd() { + echo "Traversing to Camera..." + cd "$SD_MOUNT_POINT/$SD_SRC_PATH" + echo "Removing JPG files..." + rm *.JPG + echo "Cleanup completed!" + cd - +} + +# 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 +###################################################################################### -# Initial Prompt # Bash allows for linebreaks in string literals and will # break lines accordingly in the shell -echo -e " - [ Camera Ingest Script ] - - This script is being run from: '$(pwd)' +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" - Please enter an option from below: + # Wait for input + read -p "Option: " opt - [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..." - cd "$SD_MOUNT_POINT/$SD_SRC_PATH" - echo "Removing JPG files..." - rm *.JPG - echo "Cleanup completed!" - cd - - ;; - 3) - # Camera->Mac Ingest - clear - echo "Beginning copy..." - 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) - # Mac->NAS Ingest - ;; - 0) - # Exit the script - echo "!! Quitting !!" - sleep 0.4s - clear - exit - ;; - *) - clear - echo "!! Invalid Option !!" - ;; -esac - -# Loop the script -exec ./backup.sh \ No newline at end of file + # Execute the correct commands based on input. + case "$opt" in + 1) + # Camera->Mac Ingest + clear + ingest_mac + ;; + 2) + # Mac->NAS Ingest + clear + ingest_nas + ;; + 3) + # Cleanup non-RAW images on camera. + clear + echo "Temporarily disabled!" + # clean_sd + ;; + 0) + # Exit the script + echo "!! Quitting !!" + sleep 0.8s + clear + exit + ;; + *) + clear + echo "!! Invalid Option !!" + ;; + esac +done \ No newline at end of file