#!/bin/bash

# ======================================================================
# Archivo:       limpiar
# Ruta:          /usr/local/bin/
# Autor:         Charlie Martínez® <cmartinez@quirinux.org>
# Licencia:      https://www.gnu.org/licenses/gpl-2.0.txt
# Propósito:     Recuperar espacio en disco
# Distribución:  Quirinux 2.x
# ======================================================================

#
# Copyright (c) 2019-2025 Charlie Martínez, derechos reservados.
# Licencia: https://www.gnu.org/licenses/gpl-2.0.txt
# Usos autorizados y no autorizados de la marca Quirinux:
# Ver https://www.quirinux.org/aviso-legal
#

# ----------------------------------------------------------------------
# Verificar si el usuario tiene permisos de administrador
# ----------------------------------------------------------------------

function _rootcheck() {

	if [ "$EUID" -ne 0  ]; then
		echo ''
		echo "Este script debe ejecutarse con permisos de root."
		echo 'Necesitarás ejecutar primero "su root" e ingresar'
		echo "la contraseña de root."
		echo ''
		exit 1
	fi
}

# ----------------------------------------------------------------------
# Obtener espacio en disco antes de la limpieza
# ----------------------------------------------------------------------

function _diskspace() {
	
	disk_before=$(df --output=used / | tail -1)
}

# ----------------------------------------------------------------------
# Limpiar cache de paquetes
# ----------------------------------------------------------------------

function _apt {
	
    echo "Limpiando cachés de paquetes..."
    apt-get clean
    apt-get autoclean
    apt-get autoremove 
    rm -rf /var/lib/apt/lists/*
}

# ----------------------------------------------------------------------
# Limpiar historial de Bash
# ----------------------------------------------------------------------

function _bash {

    echo "Limpiando historial de Bash"
    rm -rf ~/.bash_history
}

# ----------------------------------------------------------------------
# Eliminar archivos de backup, temporales y de intercambio VIM
# ----------------------------------------------------------------------

function _deep {

    echo "Eliminando archivos de backup, temporales y de intercambio VIM..."
    for user_home in /home/*; do
        if [[ -d "$user_home" ]]; then
            find "$user_home" -type f -regextype posix-extended -regex ".*\.[Bb][Aa][Kk]$" -delete
            find "$user_home" -type f -regextype posix-extended -regex ".*[a-zA-Z]{1,4}~$" -delete
            find "$user_home" -type f -regextype posix-extended -regex ".*/~wr[a-z][0-9]{4}\.tmp$" -delete
            find "$user_home" -type f -regextype posix-extended -regex ".*/ppt[0-9]{4}\.tmp$" -delete
        fi
    done
    find / -type f -regextype posix-extended -regex ".*/.*\.sw[nop]$" -delete 2>/dev/null
}

# ----------------------------------------------------------------------
# Borrar los registros del sistema 
# ----------------------------------------------------------------------

function _log {

    echo "Borrando todos los logs en /var/log..."
    rm -rf /var/log/*.log /var/log/*/*.log /var/log/*/*.gz /var/log/*/*.[0-9]
    dmesg --clear
}

# ----------------------------------------------------------------------
# Vaciar papeleras
# ----------------------------------------------------------------------

function _trash {
	    for user_home in /home/*; do
        if [[ -d "$user_home" ]]; then
            rm -rf "$user_home/.cache/*"
            rm -f "$user_home/.local/share/recently-used.xbel"
            rm -f "$user_home/.recently-used"
            rm -rf "$user_home/.local/share/Trash/*"
        fi
    done
    rm -rf /root/.cache/* /root/.local/share/Trash/*
}

# ----------------------------------------------------------------------
# Obtener espacio en disco después de la limpieza
# ----------------------------------------------------------------------

function _diskfree() {
	disk_after=$(df --output=used / | tail -1)
	recovered=$((disk_before - disk_after))
}

# ----------------------------------------------------------------------
# Saludo final.
# ----------------------------------------------------------------------

function _saludo() {
	echo "Limpieza completada. Se han recuperado $((recovered / 1024)) MB de espacio en disco."
}

# ======================================================================
# Ejecución de funciones
# ======================================================================
# Funcion			# Tipo		# Origen (si es remota)
# ----------------------------------------------------------------------
_rootcheck			# Local
_diskspace			# Local
_apt				# Local
_bash				# Local
_trash				# Local
_log				# Local
_diskfree			# Local
_saludo				# Local


