This FindUnusedImages script makes use of the FileDispenser example to step through all of the images in a suite. For each image, a second FileDispenser iterates over all of the scripts in the suite to see if any of them use that image.
If an image is found which doesn’t seem to be in use by any of the scripts in the suite, the script will perform an action – either deleting the script, or moving it into an “UnusedImages” directory within the suite. The script will optionally query you about each unused image that it finds, before taking action with that image.
Be aware that the search done by this script is fairly simple-minded, and also doesn’t take into account the fact that some images may be used by scripts in other suites. If your images are used by scripts in several suites, you may want to modify this script to examine the scripts in those suites as well.
Note: You’ll need version 1.5 (or later) of Eggplant, and have version 2 of the FileDispenser script in the same suite (or in a helper suite) to be able to successfully run this script. For your own protection, please make sure you make a backup of your suite, or at least your images directory, before running this script.
I have written a UNIX script to help me with the maintenance as well.
We only have one license available, and I can’t use Eggplant to help me do the usual mundane stuff.
Anyways I tried to attach the file, but find that I don’t see how to.
Here’s the code for the file. I used the bash shell. The usage for the file is at the top so everything should be explained.
** NOTE ** This is probably not the best way to do this. I was going to use PERL but that would’ve taken me too long to implement all this. I wrote this in about 3 hrs, so feel free to yell at me if you spot something wrong…
#!/bin/bash
usage() {
cat <<EOF
PURPOSE:
This program can do either:
* Create a report of used and unused images in a suite
Use the -f option to specify the path of the Suite
* List scripts image(s) were used in (Specific for that suite)
Images have to be listed in a file. The file should be passed in
using the -i option
Note *** All output is to stdout. You can re-direct the output to a file
USAGE:
find_unused_imgs.sh -f <eggplant_suite_path> [-i <img_name_list>] \\
[-s] [-h | -help]
OPTIONS:
-f <eggplant_suite_path> Path of Suite to check
-s Toggle to show used files and number of occurances
-i <img_name_list_file> File containing list of images. This option will
find and print scripts the images are used in.
General report of image used will not be created .
EXAMPLES:
Report showing only unused images for Suite win_stuff.suite
$ find_used_imgs.sh -f /usr/suites/win_stuff.suite
Report showing used and unused imgs for Suite win_stuff.suite
$ find_used_imgs.sh -f /usr/suites/win_stuff.suite -s
Report showing usage information for a list of images specified in
file /tmp/fileList.txt
$ find_used_imgs.sh -f /usr/suites/win_stuff_suite -i /tmp/fileList.txt
The format of fileList.txt should list the images, one on each line.
Do not add the extension of the file.
fileList.txt
img1
img2
img3
img4
EOF
}
SHOW_USED_IMGS=0
SHOW_IMG_USE=0
EGGPLANT_FOLDER=""
IMG_NAME_FILE=""
#
# Check for command line args
#
if [ $# -eq 0 ]; then
usage
exit
fi
#
# Do stuff depending on command line args
#
while [ $# -ne 0 ]; do
case $1 in
-f) shift; EGGPLANT_FOLDER="${1}"
;;
-s) SHOW_USED_IMGS=1
;;
-i) shift; IMG_NAME_FILE="${1}"
SHOW_IMG_USE=1
;;
-*) usage; exit
;;
esac; shift
done
#
# Check if Eggplant suite passed in is a valid suite
#
if [ "${EGGPLANT_FOLDER}" = "" ]; then
usage
echo 'ERROR: -f option requires a valid eggplant suite!'
echo
exit
else
if [ -d ${EGGPLANT_FOLDER} ];then
echo
echo "Folder to work with: ${EGGPLANT_FOLDER}"
echo
else
usage
echo "ERROR: folder ${EGGPLANT_FOLDER} cannot be found!"
echo
exit
fi
fi
#
# If img find option has been set check if image exists in folder
# and if so set program mode to image find mode
#
IMG_FOLDER="${EGGPLANT_FOLDER}/Images"
SCRIPTS_FOLDER="${EGGPLANT_FOLDER}/Scripts"
#
# Branch depending on whether we want to find information about image
# or create a report (-i option is not passed in for report)
#
if [ ${SHOW_IMG_USE} -eq 0 ]; then
# A bit clumsy but I wasn't able to get the wildcard working right
# away, so used this to get the task done
cd ${IMG_FOLDER}
#
# Create Report on used and unused images
#
IMG_LIST=/tmp/imglist
USED_IMGS=/tmp/usedimgs
FIND_FILES=*.tiff
if [ -f ${IMG_LIST} ]; then
rm -f ${IMG_LIST}
fi
if [ -f ${USED_IMGS} ]; then
rm -f ${USED_IMGS}
fi
ls -1 ${FIND_FILES} | cut -f1 -d'.' > ${IMG_LIST}
cd ${SCRIPTS_FOLDER}
COUNT=0
TOTAL=0
echo "Unused Files:"
while read line; do
NUM_OCC=`grep "${line}" * | wc -l | sed 's/ //g'`
if [ ${NUM_OCC} -eq 0 ]; then
echo " ${line}"
COUNT=`expr ${COUNT} + 1`
else
echo "${line} is used ${NUM_OCC} time(s)" >> ${USED_IMGS}
fi
TOTAL=`expr ${TOTAL} + 1`
done < ${IMG_LIST}
if [ ${SHOW_USED_IMGS} -eq 1 ]; then
echo
echo "Used Images:"
while read line; do
echo " ${line}"
done < ${USED_IMGS}
fi
echo
echo "Total Files: ${TOTAL} Num Unused files: ${COUNT} Used Files: `expr ${TOTAL} - ${COUNT}`"
echo
else
#
# Check if imagelist has been specified and exists.
# If it does, then read file, get image names, find information
# and print report
#
if [ "${IMG_NAME_FILE}" = "" ]; then
usage
echo "ERROR: image list file name cannot be empty!"
echo
exit
fi
if [ -f ${IMG_NAME_FILE} ]; then
echo "Image list file: ${IMG_NAME_FILE}"
echo
else
usage
echo "ERROR: file ${IMG_NAME_FILE} cannot be found!"
echo
exit
fi
cd ${SCRIPTS_FOLDER}
TEMP_IMG_SCRIPT_LIST=/tmp/scripts
if [ -f ${TEMP_IMG_SCRIPT_LIST} ]; then
rm -f ${TEMP_IMG_SCRIPT_LIST}
fi
while read line; do
echo "----------------------------------------------------------" >> ${TEMP_IMG_SCRIPT_LIST}
echo "Image Name : ${line}" >> ${TEMP_IMG_SCRIPT_LIST}
echo "----------------------------------------------------------" >> ${TEMP_IMG_SCRIPT_LIST}
GREP_OUT=`grep "${line}" * | cut -f1 -d':' | sed 's/[ ]+/
/g' | sed '$!N; /^\(.*\)
\1$/!P; D'`
echo "${GREP_OUT}" >> ${TEMP_IMG_SCRIPT_LIST}
echo "" >> ${TEMP_IMG_SCRIPT_LIST}
echo "" >> ${TEMP_IMG_SCRIPT_LIST}
done < ${IMG_NAME_FILE}
cat ${TEMP_IMG_SCRIPT_LIST}
fi
Thanks, Bharathh. We appreciate your taking the time to post useful utility scripts like this one. Your version has some nice features and I’m sure it will be useful to people who may be more comfortable with shell scripting than they currently are with SenseTalk.
Here one little improvement on the Unix script
If the image files are in sub folders of Image directory,
replace this line:
ls -1 ${FIND_FILES} | cut -f1 -d’.’ > ${IMG_LIST}
with this line:
find . -name “${FIND_FILES}” | grep -v .svn | cut -c 3- | cut -f1 -d’.’ > ${IMG_LIST}
~Qie He - “Fried Eggplant with meat in the middle”
Update: there is now a feature in eggPlant Functional to Show Image Usage, available in the menu by right-clicking on one of your images in the image list in your Suite. This will mark images that are referenced somewhere in that same Suite green, and mark those that are not referenced as red. Note that because images inside an image collection are often not directly referenced in your scripts, they will show as red even when the image collection itself shows up as green/referenced.