Script en bash para saber el tamaño real de los archivos de un directorio.
(10322 lectures)
Por Fco. Javier M. C.
ElectronD
(http://www.islacom.com)
Creado el 15/01/2009 15:10 modificado el 15/01/2009 15:10
|
Seguramente habrá otra manera más sencilla de hacerlo. Si lo hay lo desconozco. Después de mucho tiempo de buscar he conseguido escribir este pequeño script que a mi me ayuda y quiero compartirlo con la gente de Bulma. Espero que también os sea útil. |
Pagina1/1 |
#!/bin/bash
# ------------------------------------------------------------------------------------------------
# Script creado por: Fco. Javier M. C. <fcojavmc@todo-redes.com> bajo licencia GPL 3 ó posterior.
#
# Devuelve, el bytes, el tamaño total de todos los archivos de la ruta especificada y de
# sus subdirectorios.
#
# El espacio real ocupado por cada archivo y directorio varía en función del sistema de archivos.
# En GNU/Linux existe el comando 'du' para este propósito.
# ------------------------------------------------------------------------------------------------
declare -i t_archivo_total=0
declare -i t_archivo=0
declare -i contador_archivos=0
# Revisa que se haya pasado una ruta correcta como parámetro.
if [ $# -ne 1 ]; then
echo "Tiene que especificar una ruta como parametro."
exit
fi
if [ -d "$1" ]; then
# Cambiamos a la ruta especificada.
cd "$1"
else
echo "La ruta especificada no es valida."
exit
fi
# Localiza todos los archivos y aumenta el contador con el tamaño individual de cada archivo.
for t_archivo in `ls -lR | grep -v ^d | awk '{print $5}'`; do
t_archivo_total=$((t_archivo_total + t_archivo))
contador_archivos=$((++contador_archivos))
done
if test $contador_archivos -eq 0; then
echo "No hay archivos en la ruta especificada."
elif test $contador_archivos -eq 1; then
echo $t_archivo_total "bytes en" $contador_archivos "archivo."
else
echo $t_archivo_total "bytes en" $contador_archivos "archivos."
fi
# ------------------------------------------------------------------------------------------------ |
|
|
|
|
|
| Comentarios |
1. Re: Script en bash para saber cuánto ocupan los archivos de un directorio. (15/01/2009 15:46, #43478) Por: Anónimo |
du -ch -> Todos los directorios (sin archivos)
du -csh -> La carpeta desde la que hacemos la pregunta
du -h -> Archivos y directorios en cantidades entendibles por los humanos.
du ->todo en bytes |
|
2. Re: Script en bash para saber cuánto ocupan los archivos de un directorio. (15/01/2009 16:10, #43479) Por: Anónimo |
| ¿Estás seguro de lo que dices? |
|
|
3. Re: Script en bash para saber cuánto ocupan los archivos de un directorio. (15/01/2009 16:33, #43480) Por: Patricio León (http://www.patricioleon.cl) |
| Yo también uso el comando du es mucho mas sencillo que todo este script, |
|
4. Re: Script en bash para saber cuánto ocupan los archivos de un directorio. (15/01/2009 18:02, #43481) Por: Anónimo |
| du -sh /ruta/del/directorio |
|
5. Re: Script en bash para saber cuánto ocupan los archivos de un directorio. (15/01/2009 19:01, #43482) Por: ElectronD |
Todos los que proponeis 'du' veo primero que no habeis probado el 'script' ni comparado resultados. Voy a ver si os puedo mostrar cual fue mi problema y el motivo de la existencia de este 'script':
Ejemplo: Directorio con sólo 2 archivos
archivo1.txt 33 bytes
archivo2.txt 813 bytes
Resultado:
Salida del script: 846 bytes en 2 archivos.
Salida de 'du -ch' y 'du -csh':
20K .
20K total
Salida de 'du -h' y 'du -sh':
20K .
¿Está un poquito más claro ahora?
Saludos. |
|
6. Re: Script en bash para saber cuánto ocupan los archivos de un directorio. (16/01/2009 10:21, #43485) Por: Kiko Piris |
Sí (aunque parece que no para todo el mundo ;).
Lo que encuentro un poco “confuso” es el título del artículo :) (para saber cuanto ocupan sirve precisamente du ;).
Gracias por el script :) |
|
7. Re: Script en bash para saber cuánto ocupan los archivos de un directorio. (16/01/2009 11:44, #43486) Por: josemaX (http://www.linuxenclase.org) |
| Esto es porque du te estima lo que ocupan los archivos en el sistema de archivos (dependiendo del tamaño del bloque), no su tamaño, con lo cual pienso que para el título del artículo, el resultado correcto es el de du (cuanto ocupan los archivos) mientras que el script da el tamaño de los mismos (aunque ocupan mas en el fs).
Para que nadie te diga nada mas sobre du creo que el título debería cambiarse por "Script para saber el tamaño real de los archivos de un directorio"
Saludos. |
|
8. Re: Script en bash para saber cuánto ocupan los archivos de un directorio. (16/01/2009 11:51, #43487) Por: ElectronD |
Ok. Oido cocina. Si así se entiende mejor, pues cambiado :)
Gracias.
Un saludo. |
|
|
|
9. Re: Script en bash para saber cuánto ocupan los archivos de un directorio. (15/01/2009 20:06, #43483) Por: Anónimo |
| du -hs /directorio/* |
|
10. Re: Script en bash para saber cuánto ocupan los archivos de un directorio. (16/01/2009 00:34, #43484) Por: Anònim |
| Yo uso:
alias grandote='du -sk ./* ./.??* | sort -rn | head'
el -sk lo puedes sustituir por -sm -sg seguh lo que necesites |
|
|
11. Re: Script en bash para saber el tamaño real de los archivos de un directorio. (18/01/2009 10:06, #43488) Por: H (http://h.says.it/) |
Está interesante :)
Te apoyo un poco la didáctica, vendría bien comentar lo que hace la linea clave: ls -lR | grep -v ^d | awk '{print $5}'
Lee el directorio de forma que pide los datos entrando en los subdirectorios, quita de la cuenta los directorios porque comienzan con d y toma la columna 5, la de los tamaños.
Luego en el loop va tomando la linea 5 y sumando tamaño e incrementando el contador de ficheros.
un saludo :) |
|
12. Re: Script en bash para saber el tamaño real de los archivos de un directorio. (18/01/2009 10:13, #43489) Por: ElectronD |
| Muchas gracias por tu comentario. Efectivamente esto es lo que hace. Buen análisis.
Un saludo. |
|
|
13. Re: Script en bash para saber el tamaño real de los archivos de un directorio. (18/01/2009 21:24, #43490) Por: iarenaza (http://www.escomposlinux.org/iarenaza/) |
En realidad esta línea:
ls -lR | grep -v ^d | awk '{print $5}'
la puedes escribir sin el grep, ya que awk te permite usar expresiones regulares para indicar sobre que líneas de entrada quieres aplicar las acciones. Algo como:
ls -lR | awk '/^[^d]/ {print $5 }'
es equivalente. Sin embargo, el filtro debería ser '^-', para tener en cuenta sólo los ficheros regulares (por si hay enlaces simbólicos, sockest, ficheros de dispositivo, etc. en los cuales no tiene sentido hablar de cuanto ocupan). Así que nos quedaría (si no queremos tener en cuenta los ficheros que empiezan por '.'):
ls -lR | awk '/^-/ {print $5 }'
Saludos. Iñaki. |
|
14. Re: Script en bash para saber el tamaño real de los archivos de un directorio. (19/01/2009 00:31, #43491) Por: ElectronD |
Gracias por tu comentario. En realidad el 'script' puede modificarse a voluntad. Hasta estaba pensando incluso en utilizar 'getopts' de bash para parsear los parámetros y utilizar -R para hacer la búsqueda de archivos recursiva o no, etc. El sistema puede dar mucho juego.
Un saludo. |
|
|
15. Re: Script en bash para saber el tamaño real de los archivos de un directorio. (25/01/2009 21:02, #43494) Por: Juan Galiana (http://blogs.ua.es/jgaliana) |
Usando la idea de Iñaki, simplemente bastaría con:
t=0; for i in `ls -lR | awk '/^-/ {print $5 }'`; do let t+=i; done; echo $t;
Saludos |
|
16. Re: Script en bash para saber el tamaño real de los archivos de un directorio. (25/01/2009 21:06, #43495) Por: Juan Galiana (http://blogs.ua.es/jgaliana) |
| Con la salida idéntica al script:
shell$ t=0; f=0; for i in `ls -lR | awk '/^-/ {print $5 }'`; do let t+=i; let f+=1; done; echo $t bytes en $f archivos;
7101 bytes en 5 archivos
Un Saludo |
|
17. Re: Script en bash para saber el tamaño real de los archivos de un directorio. (05/02/2009 14:08, #43496) Por: Anónimo (http://www.infogchu.com.ar) |
| muy buen scrip me ha sido de mucha utilidad, muchas gracias hermano |
|
18. Re: Script en bash para saber el tamaño real de los archivos de un directorio. (17/02/2009 19:31, #43499) Por: Anónimo |
| Usa el treesize para linux/unix ... es la mejor solución
Saludos
http://sourceforge.net/projects/treesize |
|