diff --git a/drone-ingest-mac.sh b/drone-ingest-mac.sh new file mode 100644 index 0000000..4eee5d2 --- /dev/null +++ b/drone-ingest-mac.sh @@ -0,0 +1,260 @@ +#!/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/100MSDCF" +# 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 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 $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 "[ 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 + 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