Introducing PullPix a script I wrote to take images off of a Mavica Floppy disk cameras floppy disk. Although technically it will pull all the images from any directory tree.
83 lines
2.2 KiB
Bash
Executable File
83 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# +SPDX:MIT
|
|
|
|
## WE NEED SOME DEPENDENCIES
|
|
depcheck() {
|
|
if ! command -v "$1" &> /dev/null ; then
|
|
echo "Missing dependency $1"
|
|
exit 1
|
|
fi
|
|
}
|
|
depcheck file
|
|
depcheck find
|
|
depcheck fzf
|
|
|
|
## Find the users Pictures Directory
|
|
# The order of precedence is as follows
|
|
# 1. GSCRIPTS_PICTURES
|
|
# 2. XDG_PICTURES_DIR
|
|
# 3. HOME/Pictures
|
|
if command -v "xdg-user-dir" &> /dev/null; then
|
|
XDG_PICTURES_DIR="$(xdg-user-dir PICTURES)"
|
|
# this is the proper way of getting this directory
|
|
# according to the xdg specs
|
|
fi
|
|
PICTURESDIR=${GSCRIPTS_PICTURES:-${XDG_PICTURES_DIR:-${HOME}/Pictures}}
|
|
|
|
# This would be a rare occurance but we must be safe
|
|
if [[ ! -e ${PICTURESDIR} ]] ; then
|
|
echo "Could not find ${PICTURESDIR}" >&2
|
|
echo "Ensure it exists and or check your environment"
|
|
fi
|
|
|
|
# TODO: Make this nice e.g Read the existing folders and present a choice..
|
|
# or at least store the last used name as a variable
|
|
read -e -p"Camera Name>" CAMERA_NAME
|
|
|
|
# In the event the user is an idiot we just do this.
|
|
if [[ -z ${CAMERA_NAME} ]]; then
|
|
CAMERA_NAME="Unknown"
|
|
fi
|
|
CAMERA_NAME=$(tr "[:space:]" "_" <<< "$CAMERA_NAME")
|
|
|
|
## After this we need to find all the image files in the current directory
|
|
declare -a ALL_FILES
|
|
declare -a IMAGES
|
|
# To avoid using xargs later we read all the files into an array
|
|
readarray -d '' ALL_FILES < <(find . -type f -print0)
|
|
|
|
for FILE in "${ALL_FILES[@]}"
|
|
do
|
|
# Then manually check via this loop if its an image
|
|
if [[ "$(file --mime-type "$FILE")" =~ .*image/.* ]]; then
|
|
# Before constructing our actual images array
|
|
IMAGES+=("$FILE")
|
|
fi
|
|
done
|
|
|
|
echo "Found the Following images"
|
|
printf '%s\n' "${IMAGES[@]}"
|
|
|
|
# Make sure everything is cool
|
|
echo "Do you want to import them to your computer"
|
|
# TODO: make this a little better UX
|
|
read -r -p"y/N" -n1 CONFIRM
|
|
if [[ "$CONFIRM" != "y" ]]; then
|
|
exit 0
|
|
fi
|
|
echo ""
|
|
|
|
|
|
## Using the Information from before create our import folder
|
|
CAMERA_ROOT="${PICTURESDIR}/${CAMERA_NAME}"
|
|
IMPORT_FOLDER="${CAMERA_ROOT}/$(date -I | tr '-' '/')"
|
|
mkdir -p "$IMPORT_FOLDER"
|
|
|
|
## Then we safely copy the images into the folder.
|
|
# TODO: Perhaps this can now be made more parallel safely?
|
|
for FILE in "${IMAGES[@]}"
|
|
do
|
|
echo "$FILE"
|
|
cp -iv -t "$IMPORT_FOLDER" "$FILE"
|
|
done
|