#!/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