#!/bin/sh # Deleting all locale files and localized man pages installed # on system which are *not* listed in /etc/locale.nopurge set -e # Do nothing and report why if no valid configuration file exists: if [ ! -f /etc/locale.nopurge ] then echo " No /etc/locale.nopurge file present, exiting ..." exit 0 else if [ "$(grep -x ^NEEDSCONFIGFIRST /etc/locale.nopurge)" ] then echo echo " You have to configure \"localepurge\" with the command" echo echo " dpkg-reconfigure localepurge" echo echo " to make $0 actually start to function." echo echo " Nothing to be done, exiting ..." echo exit 0 fi fi # Make sure to exclude running under any locale other than C: export LANG=C if [ "$1" = "-debug" ] || [ "$1" = "-d" ] \ || [ "$2" = "-debug" ] || [ "$2" = "-d" ]; then set -x fi if [ "$(grep -x ^SHOWFREEDSPACE /etc/locale.nopurge)" ]; then SHOWFREEDSPACE=enabled fi if [ "$(grep -x ^DONTBOTHERNEWLOCALE /etc/locale.nopurge)" ]; then DONTBOTHERNEWLOCALE=enabled fi if [ "$(grep -x ^VERBOSE /etc/locale.nopurge)" ] \ || [ "$1" = "-verbose" ] || [ "$1" = "-v" ] \ || [ "$2" = "-verbose" ] || [ "$2" = "-v" ]; then VERBOSE=enabled fi # Define a function for disk space calculation: if [ "$(grep -x ^QUICKNDIRTYCALC /etc/locale.nopurge)" ]; then get_used_space() # Usage: get_used_space { [ -d "$1" ] || return 1 # bail out if there's no such dir set - $(df -P $1); shift $(($# - 6)); echo $3 } else get_used_space() # Usage: get_used_space { [ -d "$1" ] || return 1 # bail out if there's no such dir set - $(du -ks $1) echo $1 } fi # first update $LOCALELIST with newly introduced locales if wanted LOCALELIST=/var/cache/localepurge/localelist NEWLOCALELIST="$LOCALELIST"-new if [ "$VERBOSE" = "enabled" ]; then echo "localepurge: checking system for new locale ..." fi for NEWLOCALE in $(cd /usr/share/locale; ls .) do if [ -d /usr/share/locale/$NEWLOCALE/LC_MESSAGES ]; then if [ ! "$(grep -cx $NEWLOCALE $LOCALELIST)" = "1" ]; then echo "$NEWLOCALE" >> "$NEWLOCALELIST" fi fi done if [ -f $NEWLOCALELIST ]; then if [ "$DONTBOTHERNEWLOCALE" = "enabled" ]; then mv "$NEWLOCALELIST" "$NEWLOCALELIST".temp sort -u "$NEWLOCALELIST".temp "$LOCALELIST"> "$NEWLOCALELIST" mv "$NEWLOCALELIST" "$LOCALELIST" rm "$NEWLOCALELIST".temp else mv "$NEWLOCALELIST" "$NEWLOCALELIST".temp sort -u "$NEWLOCALELIST".temp > "$NEWLOCALELIST" rm "$NEWLOCALELIST".temp fi fi if [ -f "$NEWLOCALELIST" ] && [ ! "$DONTBOTHERNEWLOCALE" = "enabled" ]; then echo "Some new locales have appeared on your system:" echo tr '\n' ' ' < "$NEWLOCALELIST" echo echo echo "They will not be touched until you reconfigure localepurge" echo "with the following command:" echo echo " dpkg-reconfigure localepurge" echo fi # Getting rid of superfluous locale files in $LOCALEDIR: LOCALEDIR=/usr/share/locale if [ -d $LOCALEDIR ]; then if [ "$SHOWFREEDSPACE" = "enabled" ]; then LOCALEBEFORE=$(get_used_space $LOCALEDIR) fi if [ "$VERBOSE" = "enabled" ]; then echo "localepurge: processing locale files ..." for LOCALE in $(cd $LOCALEDIR; echo *) do if [ ! "$(grep -x ^$LOCALE /etc/locale.nopurge)" ] && \ [ "$(grep -x ^$LOCALE $LOCALELIST)" ]; then if [ -d $LOCALEDIR/$LOCALE/LC_MESSAGES ]; then for file in "$LOCALEDIR/$LOCALE"/*/* do if [ -f "$file" ] || [ -h "$file" ]; then /bin/rm -v "$file" fi done fi fi done else for LOCALE in $(cd $LOCALEDIR; echo *) do if [ ! "$(grep -x ^$LOCALE /etc/locale.nopurge)" ] && \ [ "$(grep -x ^$LOCALE $LOCALELIST)" ]; then if [ -d $LOCALEDIR/$LOCALE/LC_MESSAGES ]; then for file in "$LOCALEDIR/$LOCALE"/*/* do if [ -f "$file" ] || [ -h "$file" ]; then /bin/rm "$file" fi done fi fi done fi if [ "$SHOWFREEDSPACE" = "enabled" ]; then LOCALEAFTER=$(get_used_space $LOCALEDIR) LOCALETOTAL=$(($LOCALEBEFORE - $LOCALEAFTER)) if [ ! $LOCALEBEFORE = $LOCALEAFTER ]; then echo "localepurge: Disk space freed in $LOCALEDIR: "$LOCALETOTAL"K" fi fi fi # Getting rid of localized man pages in $MANPAGEDIR MANPAGEDIR=/usr/share/man if [ -d $MANPAGEDIR ] && [ "$(grep -x ^MANDELETE /etc/locale.nopurge)" ]; then if [ "$SHOWFREEDSPACE" = "enabled" ]; then MANBEFORE=$(get_used_space $MANPAGEDIR) fi if [ "$VERBOSE" = "enabled" ]; then echo "localepurge: processing man pages ..." for LOCALE in $(ls --ignore="man[1-9]*" $MANPAGEDIR) do if [ ! "$(grep -x ^$LOCALE /etc/locale.nopurge)" ] && \ [ "$(grep -x ^$LOCALE $LOCALELIST)" ]; then if [ -d $MANPAGEDIR/$LOCALE ]; then for file in "$MANPAGEDIR/$LOCALE"/man[1-9]/* do if [ -f "$file" ] || [ -h "$file" ]; then /bin/rm -v "$file" fi done fi fi done else for LOCALE in $(ls --ignore="man[1-9]*" $MANPAGEDIR) do if [ ! "$(grep -x ^$LOCALE /etc/locale.nopurge)" ] && \ [ "$(grep -x ^$LOCALE $LOCALELIST)" ]; then if [ -d $MANPAGEDIR/$LOCALE ]; then for file in "$MANPAGEDIR/$LOCALE"/man[1-9]/* do if [ -f "$file" ] || [ -h "$file" ]; then /bin/rm "$file" fi done fi fi done fi if [ "$SHOWFREEDSPACE" = "enabled" ]; then MANAFTER=$(get_used_space $MANPAGEDIR) MANTOTAL=$(($MANBEFORE - $MANAFTER)) if [ ! $MANBEFORE = $MANAFTER ]; then echo "localepurge: Disk space freed in $MANPAGEDIR: "$MANTOTAL"K" fi fi fi # Calculating and reporting total disk space freed: if [ "$SHOWFREEDSPACE" = "enabled" ]; then if [ $MANTOTAL ] && [ $LOCALETOTAL ]; then if [ ! $MANBEFORE = $MANAFTER ] && [ ! $LOCALEBEFORE = $LOCALEAFTER ]; then echo echo "Total disk space freed by localepurge: "$(($LOCALETOTAL + $MANTOTAL))"K" echo fi fi fi