#!/bin/sh ### Rozhuk Ivan 2020-2021 ### clean_system.sh ### EXCEPTION_LIST="/sbin/init.bak /libexec/ld-elf.* /usr/lib/.*\.a /usr/lib/clang/.* /usr/lib/compat /usr/lib/include/.* /usr/lib/debug/boot/.* /usr/local/lib/gio/modules /usr/lib/libc.so /usr/lib/libc\+\+.so /usr/lib/libxnet.so /usr/lib32/.*\.a /usr/lib32/libc.so /usr/lib32/libc\+\+.so /usr/lib32/libxnet.so /usr/libdata/ldscripts /usr/share/man/whatis /usr/share/openssl/man/whatis" # Time calculations. _CUR_TIME=`date '+%s'` _LIBC_TIME=`stat -f '%B' /lib/libc.so.7` _MOD_TIME_DAYS=`echo "$(( (((${_CUR_TIME} - ${_LIBC_TIME}) / 86400) + 1) ))"` # Collect data. for _DIR2CLEAN in '/bin' '/lib' '/libexec' '/sbin' '/usr/bin' '/usr/lib' '/usr/lib32' '/usr/libdata' '/usr/libexec' '/usr/sbin' '/usr/share'; do [ ! -r ${_DIR2CLEAN} ] && continue # Too old files. _FILES_RAW=`find -x -L "${_DIR2CLEAN}" -mtime +${_MOD_TIME_DAYS} -type f 2>/dev/null` _FILES_FILTERED=`echo "${_FILES_FILTERED}";echo "${_FILES_RAW}" | grep -Ev -- "${EXCEPTION_LIST}"` _FILES_EXCEPTION=`echo "${_FILES_EXCEPTION}";echo "${_FILES_RAW}" | grep -E -- "${EXCEPTION_LIST}"` # Broken symlinks. _BROKEN_SYMLINKS_RAW=`find -x -L "${_DIR2CLEAN}" -type l 2>/dev/null` _BROKEN_SYMLINKS_FILTERED=`echo "${_BROKEN_SYMLINKS_FILTERED}";echo "${_BROKEN_SYMLINKS_RAW}" | grep -Ev -- "${EXCEPTION_LIST}"` _BROKEN_SYMLINKS_EXCEPTION=`echo "${_BROKEN_SYMLINKS_EXCEPTION}";echo "${_BROKEN_SYMLINKS_RAW}" | grep -E -- "${EXCEPTION_LIST}"` # Empty folders. _EMPTY_DIRS_RAW=`find -x "${_DIR2CLEAN}" -type d -empty 2>/dev/null` _EMPTY_DIRS_FILTERED=`echo "${_EMPTY_DIRS_FILTERED}";echo "${_EMPTY_DIRS_RAW}" | grep -Ev -- "${EXCEPTION_LIST}"` _EMPTY_DIRS_EXCEPTION=`echo "${_EMPTY_DIRS_EXCEPTION}";echo "${_EMPTY_DIRS_RAW}" | grep -E -- "${EXCEPTION_LIST}"` done # Show elements to autoremove. if [ -n "${_FILES_FILTERED}" ]; then echo 'Files for auto remove:' echo "${_FILES_FILTERED}" echo '==========================================================' echo '' fi if [ -n "${_EMPTY_DIRS_FILTERED}" ]; then echo 'Empty dirs for auto remove:' echo "${_EMPTY_DIRS_FILTERED}" echo '==========================================================' echo '' fi if [ -n "${_BROKEN_SYMLINKS_FILTERED}" ]; then echo 'Broken symlinks for auto remove:' echo "${_BROKEN_SYMLINKS_FILTERED}" echo '==========================================================' echo '' fi # Show elements for manual deletion. if [ "${1}" == '-m' ]; then if [ -n "${_FILES_EXCEPTION}" ]; then echo 'Files for manual remove:' echo "${_FILES_EXCEPTION}" echo '==========================================================' echo '' fi if [ -n "${_EMPTY_DIRS_EXCEPTION}" ]; then echo 'Empty dirs for manual remove:' echo "${_EMPTY_DIRS_EXCEPTION}" echo '==========================================================' echo '' fi if [ -n "${_BROKEN_SYMLINKS_EXCEPTION}" ]; then echo 'Broken symlinks for manual remove:' echo "${_BROKEN_SYMLINKS_EXCEPTION}" echo '==========================================================' echo '' fi fi # Remove elements if -y is set. if [ "${1}" == '-y' ]; then rm -f ${_FILES_FILTERED} rm -rf ${_EMPTY_DIRS_FILTERED} rm -f ${_BROKEN_SYMLINKS_FILTERED} rm -f /etc/rc.d/abi fi