Skip to content

Instantly share code, notes, and snippets.

@Jguer
Last active December 26, 2015 13:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Jguer/345507e313d140df6d00 to your computer and use it in GitHub Desktop.
Save Jguer/345507e313d140df6d00 to your computer and use it in GitHub Desktop.
Wallpaper folder organizer
#!/bin/sh
# @Author: jguer
# @Date: 2015-12-25 21:48:40
# @Last Modified by: jguer
# @Last Modified time: 2015-12-26 13:48:04
# @Description: Wallpaper folder organizer
# @Credits: tuxtweaks for getopts code
#REQUIRES
# - exiv2
# - imagemagick
#TESTED ON
# Archlinux, zsh
#TODO
# - Add Queue to files who get read before already sorted
SCRIPT=`basename ${BASH_SOURCE[0]}`
#Set fonts for Help.
NORM=`tput sgr0`
BOLD=`tput bold`
REV=`tput smso`
OPT_VER=0 #Verbosity
OPT_REP=0 #Replace Original Folder
COUNTER=0 #File Counter
DIR_TO_COPY=0
#Help function
function HELP {
echo -e \\n"Help documentation for ${BOLD}${SCRIPT}.${NORM}"\\n
echo -e "${REV}Basic usage:${NORM} ${BOLD}$SCRIPT <Wallpaper Folder> ${NORM}"\\n
echo "Command line switches are optional. The following switches are recognized."
echo "${REV}-v${NORM} --Sets the value for option ${BOLD}verbosity${NORM} to 1. Default is ${BOLD}0${NORM}."
echo "${REV}-r${NORM} --Sets the value for option ${BOLD}replace_folder${NORM} to 1. Default is ${BOLD}0${NORM}."
echo -e "${REV}-h${NORM} --Displays this help message. No further functions are performed."\\n
echo -e "Example: ${BOLD}$SCRIPT -v -r file.ext ${NORM}"\\n
exit 1
}
#Wallpaper sorting function
function sort_wallpapers {
Dims=0
NewName=0
NewUri=0
OldUri=0
PlaceHolder="/tmp/FixedWallpapers/converted.jpg";
cd $DIR_TO_COPY
cp -Rf . /tmp/Wallpapers/
cd /tmp/Wallpapers
echo "Don't worry with exif ferrors"
for file in *.{jpg,png}; do
if [ ! -e "${file}" ] && [ ! -s "${file}" ]; then #if file exists and isn't NULL
continue
fi
iter_count=1
if [ "${file##*.}" = "png" ]; then #if file is png
convert "$file" -quality 95 "$PlaceHolder"
OldUri=$PlaceHolder
else
OldUri=$file
fi
#Get jpg dimensions
Dims="$(exiv2 -q "${OldUri}" | grep "Image size")"
Dims="${Dims#*:}"
Dims="$(echo -e "${Dims}" | tr -d '[[:space:]]')"
if [ -z "${Dims// }" ]; then #if Dimensions can't be read
continue
fi
if [[ ${file} == ${Dims}-*.jpg ]]; then
NewUri="/tmp/FixedWallpapers/${file}"
mv "$OldUri" "$NewUri"
else
#Count Wallpapers in fixed with same dimensions to ensure good labeling
for iter in /tmp/FixedWallpapers/${Dims}*; do
if [ -e ${iter} ] && [ -s ${iter} ]; then
iter_count=$((iter_count+1));
fi
done
NewName="$Dims-$iter_count"
NewUri="/tmp/FixedWallpapers/${NewName}.jpg"
if [ $OPT_VER = 1 ]; then
echo "Old Name: $file"
echo "New Name: ${NewName}.jpg"
fi
jpegtran -copy none -progressive "$OldUri" > "$NewUri"
if [ "${file##*.}" = "png" ]; then
rm "$PlaceHolder"
fi
fi
COUNTER=$((COUNTER+1));
done
rm -rf /tmp/Wallpapers
if [ $OPT_REP = 1 ]; then
rm -rf $DIR_TO_COPY
mv /tmp/FixedWallpapers $DIR_TO_COPY
if [ $OPT_VER = 1 ]; then
echo "Replaced original folder"
fi
else
if [ $OPT_VER = 1 ]; then
echo "Fixed Wallpapers in /tmp/FixedWallpapers"
fi
xdg-open /tmp/FixedWallpapers
fi
}
#Check the number of arguments. If none are passed, print help and exit.
NUMARGS=$#
if [ $NUMARGS -eq 0 ]; then
HELP
fi
### Start getopts code ###
#Parse command line flags
while getopts vrh OPT; do
case $OPT in
v) #set option "a"
OPT_VER=1
;;
r) #set option "b"
OPT_REP=1
;;
h) #show help
HELP
;;
help) #show help
HELP
;;
\?) #unrecognized option - show help
echo -e \\n"Option -${BOLD}$OPTARG${NORM} not allowed."
echo -e "Use ${BOLD}$SCRIPT -h${NORM} to see the help documentation."\\n
exit 2
;;
esac
done
# get rid of the just-finished flag arguments
shift $(($OPTIND-1))
if [ $OPT_VER = 1 ]; then
echo "Verbose Mode"
echo "Replace original folder is $OPT_REP"
echo "Removing folders from /tmp for fresh start."
fi
### Main loop ###
rm -rf /tmp/Wallpapers
rm -rf /tmp/FixedWallpapers
mkdir /tmp/Wallpapers
mkdir /tmp/FixedWallpapers
while (( "$#" )); do
if [ -d $1 ]; then
DIR_TO_COPY=$1
sort_wallpapers
fi
shift #Move on to next input directory.
done
if [ $OPT_VER = 1 ]; then
echo "Read $COUNTER files"
fi
### End main loop ###
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment