Lista los archivos por tamaños de mayor a menor.
El tamaño de los directorios es equivalente a la cantidad de información que contengan recursivamente.
El tamaño de los directorios vacÃos es cero.
En trabajos con servidores (GNU/Linux, BSD), ocasionalmente tenÃa que buscar los directorios o archivos de mayor tamaño, para respaldo u otra actividad. Usualmente con unos pocos comandos es fácil resolverle.
Pero ¿Si tienes muchÃsimos directorios con un gran árbol de subdirectorios, con muchos archivos? (ejemplo colapso de disco por mal empleo de logs)
Pues con algunas tuberÃas asunto resuelto...
Pero querÃa programar un binario en Haskell para mis amistades, asà que tomé este problema, el binario lo ejecutas llamando a un directorio y obtienes los archivos o directorios de mayor tamaño a un nivel de profundidad, sin embargo, la sumatoria es recursiva, es decir, revisa todo el árbol de subdirectorios.
- Instalar stack
- Descargar el repositorio:
git clone https://github.com/innaky/lg
- Construcción:
cd lg
stack build
Tomas el binario que se encuentra bajo el directorio .stack-work/dist/x86_64-linux-tinfo6/Cabal-3.0.1.0/build/lg
chmod 755 lg
mv lg /usr/local/bin
Listo, con estos pasos lo tendrás disponible en el sistema.
- Ayuda:
lg [-h | --help]
- Ejecución:
lg [-b] archivo | directorio
Por defecto está en formato de fácil lectura (Kilobytes, Megabytes etc), con el parámetro -b al inicio, la salida es en bytes.
- Salida con lectura agradable (lg directorio)
> lg /home/live/src/haskell-misc/
106K /home/live/src/haskell-misc/.git
23K /home/live/src/haskell-misc/learn-you-a-haskell
1K /home/live/src/haskell-misc/LICENSE
617 /home/live/src/haskell-misc/README.md
- Salida en bits (lg -b directorio)
> lg -b /home/live/src/haskell-misc/
108837 /home/live/src/haskell-misc/.git
24372 /home/live/src/haskell-misc/learn-you-a-haskell
1063 /home/live/src/haskell-misc/LICENSE
617 /home/live/src/haskell-misc/README.md`
- Salida agradable de archivo (lg /ruta/archivo):
> lg /home/live/ISOS/test.iso
516M /home/live/ISOS/test.iso
- Salida en bytes para archivos (lg -b /ruta/archivo):
> lg -b /home/live/ISOS/test.iso
541065216 /home/live/ISOS/test.iso
- ayuda (lg -h):
SYNOPSIS
lg [-h | --help ]
lg [-b] Filename | Directory
For more information lg --help
- Para ayuda detallada usar (lg --help)
Ya desde esta versión (gracias a @echarte) es fácil escalar el binario, agregando una módulo en /src e importandole en /app/Main.hs, sólo debes agregar el parámetro en la función main :: IO ()
List greater files
Return a filename and the size:
- If the input is a file return the size.
- if the input is a file type directory return the sum (recursively) of all of files.
> lg /home/live/src/haskell-misc/
106K /home/live/src/haskell-misc/.git
23K /home/live/src/haskell-misc/learn-you-a-haskell
1K /home/live/src/haskell-misc/LICENSE
617 /home/live/src/haskell-misc/README.md
> lg /home/live/src/haskell-misc/README.md
617 /home/live/src/haskell-misc/README.md
lg /home/live/src/haskell-misc/ | head -n 2
106K /home/live/src/haskell-misc/.git
23K /home/live/src/haskell-misc/learn-you-a-haskell
# Input in the directory
> cd /home/live/src/haskell-misc
# List the files
> ls -l
total 12
drwxr-xr-x 7 live live 4096 feb 17 21:40 learn-you-a-haskell
-rw-r--r-- 1 live live 1063 feb 17 21:40 LICENSE
-rw-r--r-- 1 live live 617 feb 24 18:04 README.md
# Creating directory symbolic link (DirHomeLink) and file symbolic link (MyFileLink)
> ln -s /home/live/ DirHomeLink
> ln -s /home/live/src/haskell-misc/README.md MyFileLink
# List Everything
> ls -la
total 24
drwxr-xr-x 4 live live 4096 feb 29 21:48 .
drwxr-xr-x 6 live live 4096 feb 25 04:36 ..
lrwxrwxrwx 1 live live 11 feb 29 21:47 DirHomeLink -> /home/live/
drwxr-xr-x 8 live live 4096 feb 28 21:01 .git
drwxr-xr-x 7 live live 4096 feb 17 21:40 learn-you-a-haskell
-rw-r--r-- 1 live live 1063 feb 17 21:40 LICENSE
lrwxrwxrwx 1 live live 37 feb 29 21:48 MyFileLink -> /home/live/src/haskell-misc/README.md
-rw-r--r-- 1 live live 617 feb 24 18:04 README.md
# Testing "List greater" binary (lg)
> lg .
106K /home/live/src/haskell-misc/.git
23K /home/live/src/haskell-misc/learn-you-a-haskell
1K /home/live/src/haskell-misc/LICENSE
617 /home/live/src/haskell-misc/README.md
8 /home/live/src/haskell-misc/MyFileLink
0 /home/live/src/haskell-misc/DirHomeLink
for :
- file symbolic link return the size.
- directory symbolic link return zero.