summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'localepurge')
-rwxr-xr-xlocalepurge253
1 files changed, 253 insertions, 0 deletions
diff --git a/localepurge b/localepurge
new file mode 100755
index 0000000..71a0582
--- /dev/null
+++ b/localepurge
@@ -0,0 +1,253 @@
+#!/bin/bash
+
+# Deleting all locale files on system
+# *not* listed in /etc/locale.nopurge
+
+set -e
+
+LOCALEDIRS="/usr/share/locale /usr/local/share/locale /usr/kde/?.?/share/locale /opt/sun-jdk-*/jre/lib/locale /opt/sun-jre-bin-*/lib/locale /usr/lib/locale"
+MANPAGEDIRS="/usr/share/man /usr/man /usr/local/share/man /usr/kde/?.?/share/man /usr/kde/?.?/man /opt/sun-jdk-*/man /opt/sun-jre-bin-*/man"
+LOCALELIST="/var/cache/localepurge/localelist"
+CONFIGFILE="/etc/locale.nopurge"
+VERSION="0.5.2"
+
+LOCALETOTAL=0
+MANTOTAL=0
+
+GOOD=$'\e[32;01m'
+WARN=$'\e[33;01m'
+BAD=$'\e[31;01m'
+NORMAL=$'\e[0m'
+HILITE=$'\e[36;01m'
+BRACKET=$'\e[34;01m'
+BOLD=$'\e[1m'
+
+eerror () {
+ echo -e " ${BAD}*${NORMAL} $*"
+}
+
+ewarn () {
+ echo -e " ${WARN}*${NORMAL} $*"
+}
+
+einfo () {
+ echo -e " ${GOOD}*${NORMAL} $*"
+}
+etab () {
+ echo -e " ${GOOD}*${NORMAL} $*"
+}
+
+ayuda () {
+ echo "${HILITE}localepurge${NORMAL} for ${BOLD}Gentoo Linux${NORMAL} ${BRACKET}[${NORMAL} ${GOOD}${VERSION}${NORMAL} ${BRACKET}]${NORMAL}"
+ echo -e " " "by bass@gentoo.org"
+ echo
+ einfo "Remember that you must edit ${CONFIGFILE}"
+ echo
+ einfo "Usage: `basename $0` [options]"
+ echo
+ etab "${BOLD}-help (-h) ${NORMAL} : show this help."
+ etab "${BOLD}-debug (-d) ${NORMAL} : debug mode."
+ etab "${BOLD}-verbose (-v) ${NORMAL} : verbose mode."
+ etab "${BOLD}-nocolor (-nc) ${NORMAL} : no color mode."
+ etab "${BOLD}-pretend (-p) ${NORMAL} : pretend mode."
+ etab "${BOLD}-version ${NORMAL} : show version."
+ echo
+}
+
+version () {
+ einfo "${BRACKET}[${NORMAL} ${GOOD}${VERSION}${NORMAL} ${BRACKET}]${NORMAL}"
+}
+
+# Check options in CONFIGFILE
+
+grep -xq SHOWFREEDSPACE ${CONFIGFILE} && SHOWFREEDSPACE=enabled
+grep -xq VERBOSE ${CONFIGFILE} && VERBOSE=enabled
+grep -xq NOCOLOR ${CONFIGFILE} &&
+ unset GOOD WARN BAD NORMAL HILITE BRACKET BOLD
+
+# We need to loop through for no color first, otherwise options that exit
+# will make us ignore nocolor, so we might as well loop for debug first as well
+
+for x in $@
+do
+ if [ "$x" = "-debug" ] || [ "$x" = "-d" ]; then
+ set -x
+ fi
+
+ if [ "$x" = "-nocolor" ] || [ "$x" = "-nc" ]; then
+ unset GOOD WARN BAD NORMAL HILITE BRACKET BOLD
+ fi
+
+done
+
+# Loop through the rest of the options
+
+for x in $@
+do
+
+ if [ "$x" = "-verbose" ] || [ "$x" = "-v" ]; then
+ VERBOSE=enabled
+ fi
+
+ if [ "$x" = "-version" ] ; then
+ version
+ exit 0
+ fi
+
+ if [ "$x" = "-p" ] || [ "$x" = "-pretend" ]; then
+ PRETEND=enabled
+ fi
+
+ if [ "$x" = "-help" ] || [ "$x" = "-h" ]; then
+ ayuda
+ exit 0
+ fi
+
+done
+
+# Do nothing and report why if no valid configuration file exists:
+
+if [ ! -f ${CONFIGFILE} ]
+ then
+ eerror " No ${CONFIGFILE} file present, exiting ..."
+ exit 0
+ else
+ if [ "`grep -x ^NEEDSCONFIGFIRST ${CONFIGFILE}`" ]
+ then
+ echo ""
+ einfo " You have to configure \"${CONFIGFILE}\" "
+ echo ""
+ einfo " to make $0 actually start to function."
+ echo ""
+ einfo " Nothing to be done, exiting ..."
+ echo ""
+ exit 0
+ fi
+fi
+
+# Prune the locale list using CONFIGFILE as a list of regex patterns:
+
+PURGELIST=`grep -xvf ${CONFIGFILE} "${LOCALELIST}"`
+
+# Getting rid of superfluous locale files in $LOCALEDIR:
+
+purgelocale () {
+ local LOCALEDIR="$1"
+if [ -d $LOCALEDIR ]; then
+
+ if [ "$SHOWFREEDSPACE" = "enabled" ]; then
+ LOCALEBEFORE=$(df -P $LOCALEDIR | awk '{if ( NR==2 ) { print $3 }}')
+ fi
+
+ if [ "$VERBOSE" = "enabled" ]; then
+ einfo "localepurge: processing locale files in ${LOCALEDIR} ..."
+ for LOCALE in `/bin/ls ${LOCALEDIR}`
+ do
+ if echo "${PURGELIST}" | grep -xq ${LOCALE}; then
+ if [ -d ${LOCALEDIR}/${LOCALE}/LC_MESSAGES ]; then
+ if [ "${PRETEND}" = "enabled" ]; then
+ echo "${LOCALEDIR}/${LOCALE}"
+ else
+ /bin/rm -vf `find ${LOCALEDIR}/${LOCALE} -type f`
+ fi
+ fi
+ fi
+ done
+ else
+ for LOCALE in `/bin/ls ${LOCALEDIR}`
+ do
+ if echo "${PURGELIST}" | grep -xq ${LOCALE}; then
+ if [ -d ${LOCALEDIR}/${LOCALE}/LC_MESSAGES ]; then
+ if [ "${PRETEND}" = "enabled" ]; then
+ echo "${LOCALEDIR}/${LOCALE}"
+ else
+ /bin/rm -vf `find ${LOCALEDIR}/${LOCALE} -type f`
+ fi
+ fi
+ fi
+ done
+ fi
+
+ if [ "$SHOWFREEDSPACE" = "enabled" ]; then
+ LOCALEAFTER=$(df -P $LOCALEDIR | awk '{if ( NR==2 ) { print $3 }}')
+ LOCALESUM=$(($LOCALEBEFORE - $LOCALEAFTER))
+ LOCALETOTAL=$(($LOCALETOTAL + $LOCALESUM))
+ if [ ! $LOCALEBEFORE = $LOCALEAFTER ]; then
+ einfo "localepurge: Disk space freed in $LOCALEDIR: ${BOLD}"$LOCALESUM"K${NORMAL}"
+ fi
+ fi
+fi
+}
+
+# Getting rid of localized man pages in $MANPAGEDIR
+
+purgeman () {
+ local MANPAGEDIR="$1"
+if [ -d $MANPAGEDIR ] && [ "`grep -x ^MANDELETE ${CONFIGFILE}`" ]; then
+
+ if [ "$SHOWFREEDSPACE" = "enabled" ]; then
+ MANBEFORE=$(df -P $MANPAGEDIR | awk '{if ( NR==2 ) { print $3 }}')
+ fi
+
+ if [ "$VERBOSE" = "enabled" ]; then
+ einfo "localepurge: processing man pages in ${MANPAGEDIR} ..."
+ for LOCALE in `/bin/ls ${MANPAGEDIR} | grep -v ^man[1-9]`
+ do
+ if echo "${PURGELIST}" | grep -xq ${LOCALE}; then
+ if [ -d ${MANPAGEDIR}/${LOCALE} ]; then
+ if [ "${PRETEND}" = "enabled" ]; then
+ echo "${MANPAGEDIR}/${LOCALE}"
+ else
+ /bin/rm -f `find ${MANPAGEDIR}/${LOCALE} -type f`
+ fi
+ fi
+ fi
+ done
+ else
+ for LOCALE in `/bin/ls ${MANPAGEDIR} | grep -v ^man[1-9]`
+ do
+ if echo "${PURGELIST}" | grep -xq ${LOCALE}; then
+ if [ -d ${MANPAGEDIR}/${LOCALE} ]; then
+ if [ "${PRETEND}" = "enabled" ]; then
+ echo "${MANPAGEDIR}/${LOCALE}"
+ else
+ /bin/rm -f `find ${MANPAGEDIR}/${LOCALE} -type f`
+ fi
+ fi
+ fi
+ done
+ fi
+
+ if [ "$SHOWFREEDSPACE" = "enabled" ]; then
+ MANAFTER=$(df -P $MANPAGEDIR | awk '{if ( NR==2 ) { print $3 }}')
+ MANSUM=$(($MANBEFORE - $MANAFTER))
+ MANTOTAL=$(($MANTOTAL + $MANSUM))
+ if [ ! $MANBEFORE = $MANAFTER ]; then
+ einfo "localepurge: Disk space freed in $MANPAGEDIR: ${BOLD}"$MANSUM"K${NORMAL}"
+ fi
+ fi
+fi
+}
+
+[ "${PRETEND}" = "enabled" ] &&
+ ewarn "If not pretending, localepurge would clear the following directories:\n"
+
+for folder in ${LOCALEDIRS}; do
+ purgelocale "$folder"
+done
+
+for folder in ${MANPAGEDIRS}; do
+ purgeman "$folder"
+done
+
+# Calculating and reporting total disk space freed:
+
+if [ "$SHOWFREEDSPACE" = "enabled" ]; then
+ if [ $MANTOTAL ] && [ $LOCALETOTAL ]; then
+ if [ ! $MANBEFORE = $MANAFTER ] && [ ! $LOCALEBEFORE = $LOCALEAFTER ]; then
+ echo ""
+ einfo "Total disk space freed by localepurge: ${BOLD}"$(($LOCALETOTAL + $MANTOTAL))"K${NORMAL}"
+ echo ""
+ fi
+ fi
+fi