├── README.md └── unused-image.sh /README.md: -------------------------------------------------------------------------------- 1 | # unsed-image 2 | 3 | This shell script is used to check and clean unused image file in your project directory,supoort Android and IOS. 4 | 5 | ## show unused image file 6 | 7 | ./unused-image.sh -p /path/of/your/project 8 | 9 | 10 | ## show and clean unused image file 11 | 12 | ./unused-image.sh -r -p /path/of/your/project 13 | -------------------------------------------------------------------------------- /unused-image.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | PROGNAME=$(basename "$0") 4 | PROGDIR=$(dirname "$0") 5 | 6 | usage() 7 | { 8 | echo "Usage: $PROGNAME [option] -p path-of-project" 9 | echo "" 10 | echo "-p Specifyed the path of your project" 11 | echo "-r Remove unused image file" 12 | echo "-h Show this message" 13 | 14 | exit 1 15 | } 16 | 17 | PRJ_ROOT=$1 18 | REMOVE=false 19 | COUNT=0 20 | 21 | 22 | while getopts ":rp:" optname 23 | do 24 | case "$optname" in 25 | "p") 26 | PRJ_ROOT=$OPTARG # specifyed the project root 27 | ;; 28 | "r") 29 | REMOVE=true # remove unused image resource 30 | ;; 31 | "?") 32 | usage 33 | ;; 34 | ":") 35 | echo "No argument value for option $OPTARG" 36 | ;; 37 | *) 38 | # Should not occur 39 | echo "Unknown error while processing options" 40 | ;; 41 | esac 42 | #echo "OPTIND is now $OPTIND" 43 | done 44 | 45 | 46 | check_files=`find $PRJ_ROOT -name '*.xib' -o -name '*.storyboard' -o -name '*.[mh]' -o -name '*.pch' -o -name '*.java' -o -name '*.xml'` 47 | 48 | for png in `find $PRJ_ROOT -name '*.png'` 49 | do 50 | match_name=`basename $png` 51 | 52 | suffix1="@2x.png" 53 | suffix2=".9.png" 54 | suffix3=".png" 55 | suffix4="@3x.png" 56 | 57 | if [[ ${match_name/${suffix1}//} != $match_name ]]; then 58 | match_name=${match_name%$suffix1} 59 | elif [[ ${match_name/${suffix4}//} != $match_name ]]; then 60 | match_name=${match_name%$suffix4} 61 | elif [[ ${match_name/${suffix2}//} != $match_name ]]; then 62 | match_name=${match_name%$suffix2} 63 | else 64 | match_name=${match_name%$suffix3} 65 | fi 66 | 67 | dir_name=`dirname $png` 68 | if [[ $dir_name =~ .bundle$ ]] || [[ $dir_name =~ .appiconset$ ]] || [[ $dir_name =~ .launchimage$ ]]; then 69 | continue 70 | fi 71 | 72 | referenced=false 73 | 74 | for file in `echo $check_files | sed 's/\n/ /g'` 75 | do 76 | if grep -sqh "$match_name" "$file"; then 77 | referenced=true 78 | fi 79 | done 80 | 81 | if ! $referenced ; then 82 | echo "The '$png' was not referenced in any file" 83 | COUNT=`expr $COUNT + 1` 84 | if $REMOVE ; then 85 | echo "Do remove unused image file '$png'" 86 | rm -f $png 87 | fi 88 | fi 89 | 90 | done 91 | 92 | echo "============= Total $COUNT unused image files =============" 93 | --------------------------------------------------------------------------------