#!/bin/sh # clean_pkg_logs-0.1 / clean /var/log/removed_packages & removed_scripts # # Copyright 2019 Stu Miller, Colorado, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ----------------------------------------------------------------------------- if [ "$1" = "test" ] || [ "$1" = "remove" ]; then printf '%s\n' "" "Start cleanup - $1" "" else printf '%s\n' "" "Script requires argument: test|remove" "" exit fi CLEAN_DIR=(/var/log/removed_packages /var/log/removed_scripts) TMP_DIR="/tmp" printf '%s\n' "Determine unique packages..." > $TMP_DIR/unique printf '%s\n' "Determine packages to keep..." > $TMP_DIR/keep printf '%s\n' "Determine packages to remove..." > $TMP_DIR/remove for DIR in "${CLEAN_DIR[@]}"; do printf '%s\n' "" "$DIR" "" printf '%s\n' "" "$DIR" "" >> $TMP_DIR/unique printf '%s\n' "" "$DIR" "" >> $TMP_DIR/keep printf '%s\n' "" "$DIR" "" >> $TMP_DIR/remove UNIQUE=($( ls -1 --dereference-command-line-symlink-to-dir $DIR \ | rev \ | sed -e 's/.*68x-//g' -e 's/.*hcraon-//g' -e 's/.*68[3-6]i-//g' \ | cut -d'-' -f2-9 \ | rev \ | uniq )) printf '%s\n' "unique package count: ${#UNIQUE[@]}" ARRAY_NAME="UNIQUE[@]"; printf '%s\n' "${!ARRAY_NAME}" >> $TMP_DIR/unique TOTAL=0; KEEP=0; REMOVE=0 for ROW in "${UNIQUE[@]}"; do ARRAY=($(ls -t $DIR | grep -e "^$ROW-[0-9]")) for PKG in "${!ARRAY[@]}"; do if [ $PKG -eq 0 ] || [ $PKG -eq 1 ] && [ ${ARRAY[$PKG]} ]; then printf '%s\n' ${ARRAY[$PKG]} >> $TMP_DIR/keep ((KEEP++)) else printf '%s\n' ${ARRAY[$PKG]} >> $TMP_DIR/remove [ "$1" = "remove" ] && rm $DIR/${ARRAY[$PKG]} ((REMOVE++)) fi ((TOTAL++)) done done printf '%s\n' "total package count: $TOTAL" \ "keep package count: $KEEP" \ "remove package count: $REMOVE" done printf '%s\n' "" "See /tmp for 3 log files (unique, keep & remove)" "Script complete!" ""