From 4b6863b348df657248bfeec2a06f3a6759718b72 Mon Sep 17 00:00:00 2001 From: Skylar Grant Date: Sun, 23 Jun 2024 13:50:40 -0400 Subject: [PATCH] Combined ingest scripts --- drone-ingest-mac.sh | 276 ----------------------------- cam-ingest-mac.sh => ingest-mac.sh | 166 +++++++++++++---- 2 files changed, 128 insertions(+), 314 deletions(-) delete mode 100755 drone-ingest-mac.sh rename cam-ingest-mac.sh => ingest-mac.sh (69%) mode change 100755 => 100644 diff --git a/drone-ingest-mac.sh b/drone-ingest-mac.sh deleted file mode 100755 index ff4286b..0000000 --- a/drone-ingest-mac.sh +++ /dev/null @@ -1,276 +0,0 @@ -#!/bin/bash - -###################################################################################### -# Name: Drone Ingest Script -# Author: voidf1sh (Skylar Grant) -# Environment: M1 MacBook Pro -# -# Mounts: -# Drone 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: drone-ingest-mac.sh -# Version: 0.0.29 -###################################################################################### - -# 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 -# Drone's path to images -SD_SRC_PATH="/DCIM/100MEDIA" -# Where to ingest to on the Mac -MAC_INGEST_PATH="$HOME/Pictures/Drone Ingest/$CURRENT_DATE" -# Where to ingest to on the NAS -NAS_INGEST_PATH="/Drone Ingest/$CURRENT_DATE" -# NAS Network Address -NAS_ADDRESS="//GUEST:@192.168.0.2/media" -# SD Card Mount Point -SD_MOUNT_POINT="/Volumes/Untitled" - -###################################################################################### -# Functions -###################################################################################### - -# 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/{DNG,JPG,MP4}..." - # Since the parent doesn't exist, we create it and all children at once - mkdir -p "$MAC_INGEST_PATH"/{DNG,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 DNG 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/{DNG,JPG,MP4}..." - # Since the parent doesn't exist, we create it and all children at once - mkdir -p "$NAS_MOUNT_POINT/$NAS_INGEST_PATH"/{DNG,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 DNG 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 drone. -clean_sd() { - echo "Traversing to Drone..." - cd "$SD_MOUNT_POINT$SD_SRC_PATH" || { echo "Failed to navigate to SD card path."; return 1; } - - echo "Are you sure you want to delete all JPG, DNG, and MP4 files in $SD_MOUNT_POINT$SD_SRC_PATH? (y/N)" - read -r confirmation - - if [[ "$confirmation" =~ ^[Yy]$ ]]; then - echo "Removing JPG files..." - rm *.JPG - - echo "Removing DNG files..." - rm *.DNG - - echo "Removing MP4 files..." - rm *.MP4 - - echo "Cleanup completed!" - else - echo "Cleanup aborted." - fi - - cd - || { echo "Failed to return to the previous directory."; return 1; } -} - -# Drone->Mac Ingest -ingest_mac() { - # Check if the SD card is mounted - if mount | grep -q $SD_MOUNT_POINT; then - # Get the SD Card mount point, this is static though - 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 DNG files - arw_files=("$SD_MOUNT_POINT/$SD_SRC_PATH/"*.DNG) - if [[ -f "${arw_files[0]}" ]]; then - echo "Copying DNGs..." - rsync -avzc --progress "$SD_MOUNT_POINT/$SD_SRC_PATH/"*.DNG "$MAC_INGEST_PATH/DNG/" - else - echo "No DNGs, 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 DNG files - arw_files=("$MAC_INGEST_PATH/DNG/"*.DNG) - if [[ -f "${arw_files[0]}" ]]; then - echo "Copying DNGs..." - rsync -avzc --progress "$MAC_INGEST_PATH/DNG/"*.DNG "$NAS_MOUNT_POINT/$NAS_INGEST_PATH/DNG/" - else - echo "No DNGs, 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 "[ Drone Ingest Script ]" - echo "" - echo "Please enter an option from below:" - echo "" - echo "[1] Drone->Mac Ingest" - echo "[2] Mac->NAS Ingest" - echo "[3] Cleanup images on drone." - echo "" - echo "[0] Exit" - - # Wait for input - read -p "Option: " opt - - # Execute the correct commands based on input. - case "$opt" in - 1) - # Drone->Mac Ingest - clear - ingest_mac - ;; - 2) - # Mac->NAS Ingest - clear - ingest_nas - ;; - 3) - # Cleanup images on drone. - 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 diff --git a/cam-ingest-mac.sh b/ingest-mac.sh old mode 100755 new mode 100644 similarity index 69% rename from cam-ingest-mac.sh rename to ingest-mac.sh index 5f3f858..9c6fa3c --- a/cam-ingest-mac.sh +++ b/ingest-mac.sh @@ -1,45 +1,113 @@ #!/bin/bash ###################################################################################### -# Name: Camera Ingest Script +# Name: Photo/Video Ingest Script for Camera and Drone # Author: voidf1sh (Skylar Grant) -# Environment: M1 MacBook Pro +# Environment: M1 MacBook Pro, Sony a5100, DJI Mini 2 # -# Mounts: +# Mounts: (Device Mount -- Volume Mount) # Camera SD: /dev/diskXsY (varies) -- /Volumes/NO NAME +# Drone SD: /dev/diskXsY (varies) -- /Volumes/Untitled # NAS: //GUEST:@192.168.0.2/media -- /Volumes/media or /Volumes/media-1 (varies) # +# Ingest Source Paths: +# Camera SD: /DCIM/100MSDCF +# Drone SD: /DCIM/100MEDIA +# # Git: https://git.vfsh.dev/voidf1sh/custom-scripts -# File: cam-ingest-mac.sh -# Version: 0.0.28 +# File: ingest-mac.sh +# Version: 0.1.1 ###################################################################################### # 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 +# Moving mount points to indices, 0=Camera Mode 1=Drone Mode +INGEST_MODE=9 # Default to an invalid mode. + +declare -a MODES +MODES[0]="Camera" +MODES[1]="Drone" # SD card mount point -SD_MOUNT_POINT="/Volumes/NO NAME" +declare -a SD_MOUNT_POINT +SD_MOUNT_POINT[0]="/Volumes/NO NAME" # Camera +SD_MOUNT_POINT[1]="Volumes/Untitled" # Drone # Camera's path to images -SD_SRC_PATH="/DCIM/100MSDCF" +declare -a SD_SRC_PATH +SD_SRC_PATH[0]="/DCIM/100MSDCF" # Camera +SD_SRC_PATH[1]="/DCIM/100MEDIA" # Drone # NAS Network Address NAS_ADDRESS="//GUEST:@192.168.0.2/media" # Folder where ingests are stored on the Mac -MAC_INGEST_FOLDER="$HOME/Pictures/Camera Ingest" -# Where to ingest to on the Mac -MAC_INGEST_PATH="$MAC_INGEST_FOLDER/$CURRENT_DATE" +declare -a MAC_INGEST_FOLDER +MAC_INGEST_FOLDER[0]="$HOME/Pictures/Camera Ingest" # Camera +MAC_INGEST_FOLDER[1]="$HOME/Pictures/Drone Ingest" # Drone # Folder where ingests are stored on the NAS -NAS_INGEST_FOLDER="/Camera Ingest" -# Where to ingest to on the NAS -NAS_INGEST_PATH="$NAS_INGEST_FOLDER/$CURRENT_DATE" +declare -a NAS_INGEST_FOLDER +NAS_INGEST_FOLDER[0]="/Camera Ingest" +NAS_INGEST_FOLDER[1]="/Drone Ingest" ###################################################################################### # Functions ###################################################################################### +# Set mode configuration +set_mode() { + INGEST_MODE=$1 + # Where to ingest to on the Mac + MAC_INGEST_PATH="${MAC_INGEST_FOLDER[$INGEST_MODE]}/$CURRENT_DATE" + # Where to ingest to on the NAS + NAS_INGEST_PATH="${NAS_INGEST_FOLDER[$INGEST_MODE]}/$CURRENT_DATE" + echo "Ingest mode set to ${MODES[$INGEST_MODE]} [$INGEST_MODE]" +} + +# Mode Prompt +mode_prompt() { + # Print the selection prompt + echo "[ Photo/Video Ingest Script ]" + echo "" + echo "Please select an ingest mode:" + echo "" + echo "[1] Camera" + echo "[2] Drone" + echo "" + echo "[0] Exit" + + # Wait for input + read -p "Mode: " mode + + # Execute the correct commands based on input. + case "$mode" in + 1) + # Camera Mode + clear + set_mode 0 + ;; + 2) + # Drone Mode + clear + set_mode 1 + ;; + 0) + # Exit the script + echo "!! Quitting !!" + sleep 0.8s + clear + exit + ;; + *) + clear + echo "!! Invalid Option !!" + exit 1 + ;; + esac +} + # Create and open Mac folders. create_folders_mac() { # Check if the parent ingest directory doesn't exist @@ -149,15 +217,6 @@ clean_sd() { # 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..." @@ -193,15 +252,6 @@ ingest_mac() { # 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..." echo "Syncing ingested images with NAS..." @@ -238,6 +288,36 @@ ingest_nas() { open "$NAS_MOUNT_POINT/$NAS_INGEST_PATH" } +###################################################################################### +# Check for Connections +###################################################################################### + +# Check if the SD card is mounted +if mount | grep -q "${SD_MOUNT_POINT[$INGEST_MODE]}"; then + echo "SD Card Mounted at $SD_MOUNT_POINT." +else + echo "ERR: SD Card Not mounted!" + exit 1 +fi + +# 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 + +###################################################################################### +# Mode Prompt +###################################################################################### + +# Empty the screen +clear +mode_prompt + ###################################################################################### # Prompt Loop ###################################################################################### @@ -245,14 +325,21 @@ ingest_nas() { # Bash allows for linebreaks in string literals and will # break lines accordingly in the shell while true; do - echo "" - echo "[ Camera Ingest Script ]" + # Empty the screen + clear + # Print the prompt + echo "[ Photo/Video Ingest Script ]" + echo "Mode: ${MODES[$INGEST_MODE]}" + echo "Ingest Source Path: ${SD_MOUNT_POINT[$INGEST_MODE]}${SD_SRC_PATH[$INGEST_MODE]}" + echo "Mac Ingest Path: $MAC_INGEST_PATH" + echo "NAS Ingest Path: $NAS_INGEST_PATH" echo "" echo "Please enter an option from below:" echo "" - echo "[1] Camera->Mac Ingest" + echo "[1] SD->Mac Ingest" echo "[2] Mac->NAS Ingest" - echo "[3] Cleanup non-RAW images on camera." + echo "[3] !! Delete ALL images on SD card!!" + echo "[4] Change ingest mode" echo "" echo "[0] Exit" @@ -262,7 +349,7 @@ while true; do # Execute the correct commands based on input. case "$opt" in 1) - # Camera->Mac Ingest + # SD->Mac Ingest clear ingest_mac ;; @@ -272,11 +359,14 @@ while true; do ingest_nas ;; 3) - # Cleanup non-RAW images on camera. + # !! Delete ALL images on SD card!! clear - # echo "Temporarily disabled!" clean_sd ;; + 4) + # Change ingest mode + clear + mode_prompt;; 0) # Exit the script echo "!! Quitting !!"