Categorías: Como se haceTerminal

TIPS – Obtener tamaño de archivos, por tipo

En ocasiones estamos en la terminal y no tenemos muy claro cuánto espacio están ocupando los distintos tipos de archivo en determinado directorio.

Para conocer justamente esto, hice el siguiente script:

#! /bin/sh
# fsize version 0.3 (2017-10-28) por Hugo Florentino
# Lista en orden descendente el espacio ocupado por diferentes tipos de archivos
#
# Para mayor comodidad, copiar en una ruta como /usr/local/bin/

if [ $# -eq 0 ]; then
   TARGETDIR=$(pwd)
elif [ $# -eq 1 ] && [ -d "$1" ]; then
   TARGETDIR="${1}"
else
   echo "El argumento debe ser un directorio (de no especificarse, se utiliza el actual)."
   exit -1
fi

# Variable para identificar archivos sin una extensión
UNSPEC=Otros

RESULTS=$(find -P "${TARGETDIR}" -type f -printf "%s.%f\n" \
  | awk -v NA="${UNSPEC}" -F "." '{if (NF>2) ext=$NF; else ext=NA;
  filetype[ext]++; filesize[ext]+=$1;} END {for (s in filetype)
  printf("%s %0.0f %12.0f\n", s, filetype[s], filesize[s])}' \
  | sort -k3 -nr | awk '{printf "%s (%s);%\047.2f MiB\n",
  $1, $2, $3/(1024*1024)}' | column -ts ';')

# Paginar resultados, de ser necesario
if [ $(echo "${RESULTS}" | wc -l) -gt $(tput lines) ]; then
  if [ -z "${PAGER}" ]; then
    PAGER=$(which pager)
  fi
  echo "${RESULTS}" | "${PAGER}"
else
  echo "${RESULTS}"
fi

unset UNSPEC TARGETDIR

exit

El script no será la gran cosa, pero ejemplifica varias técnicas, espero que lo encuentren interesante. (Al ejecutarse, el número entre paréntesis representa la cantidad de archivos para cada tipo).

Nota: Aparentemente los nombre de archivos muy largos pueden ser un problema para mawk (la implementación de awk instalada por defecto en algunas distribuciones), así que recomiendo reemplazarla por gawk.

¿De cuánta utilidad te ha parecido este contenido?

Hugo Florentino

Administrador de redes y sistemas. Usuario regular de GNU/Linux desde Octubre de 2008. Miembro fundador del Grupo de Usuarios de Tecnologías Libres (GUTL).

Compartir
Publicado por
Hugo Florentino

Entradas recientes

Alta disponibilidad de sus base de datos con Percona XtraDB Cluster en Kubernetes

Uno de los grandes retos al que nos podemos enfrentar cuando una aplicación crece, es…

9 meses hace

Home automation (Parte 3) – ESPHome

Qué es lo que deseo hacer en este capítulo? Básicamente un sonoff, quiero encender/apagar las…

1 año hace

Home automation (Parte 2) – Home Assistant

Hace algunos meses estoy escuchando hablar del proyecto Home Assistant (HA). En palabras literales del…

1 año hace

Home automation (Parte 1)

Desde hace varios meses vengo con la idea de automatizar la casa donde vivo. Poco…

1 año hace

Cocinando una imagen personalizada de OpenWRT

El artículo describe el uso para un caso particular de OpenWRT y la creación de…

1 año hace