Volver al blog

TIPS - Obtener tamaño de archivos, por tipo

linux-penguin-logo

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.

Suscríbete · Newsletter

Mantente al día, cada semana

Artículos prácticos sobre Linux, redes, seguridad, virtualización y la nube — escritos por sysadmins cubanos.

  • Guías y tutoriales de administración de sistemas
  • Nuevos artículos sobre servidores, redes y nube
  • Sin spam, cancela cuando quieras

Respetamos tu bandeja de entrada. Cancela con un clic.

Patrocinado por SYSCU

¿Tu infraestructura en la nube te cuesta de más?

SYSCU optimiza tu nube de punta a punta — FinOps, DevOps & CI/CD, migraciones a AWS, seguridad y observabilidad. Equipo 100 % senior que reduce tu factura hasta un 40 % y acelera tus despliegues en semanas.

Nuevo · BetaSYSCU Atlas Insight — la plataforma FinOps que convierte tu gasto AWS en decisiones: visibilidad multi-cuenta, recomendaciones automáticas y alertas de anomalías.

No comments yet