Duda en bash

Iniciado por Flakito81, 12 Abril 2010, 20:02 PM

0 Miembros y 1 Visitante están viendo este tema.

Flakito81

Hola a tod@s!!!

Mi duda es "simple" ¿cómo puedo saber el espacio físico que ocupa un fichero en disco? No el valor que da ls -l, wc -c, stat -c %s, ... sino el físico.

He pasado buena parte de la tarde de ayer intentando solucionarlo y no hay manera.

Gracias!!

^Tifa^

#1
Hola Flakito81   :-*

Querras considerar el comando:

bash$  du   -sh   fichero

Puede ser fichero o carpeta vamos loquesea.

Besis   :-*

Flakito81

Hola ^Tifa^  cuánto tiempo!! :)

El post me quedó incompleto porque me faltó incluir que no puedo usar el du xDD

Me he puesto a investigar por las opciones del ls y de los diferentes comandos, en especial del stat y he observado lo siguiente:

Código (bash) [Seleccionar]

ls -ls [archivo | directorio]

Me muestra en la primera columna el tamaño en bloque, que viene a coincidir con lo que me da el du

Código (bash) [Seleccionar]

stat -c "%b %B" <archivo | *>

Me da el numero de bloques del archivo y el tamaño de cada bloque, por lo que multiplicando llegaría al mismo resultado (exceptuando las unidades, pero que es fácil de solucionar).

Muchas gracias por responder y espero que si existe alguna corrección la comenten :)

^Tifa^

Ok no puedes usar du  pero si puedes usar ls  entonces haz considerado usar:

ls  -sh   fichero

Aca te sale el tamano real (En KB o MB depende el tamanio del fichero o carpeta). No en Bloques... aunque ciertamente yo no se si tu buscas el tamanio obligatoriamente en bloques o en KB y MB... esta parte no la haz expuesto.

Flakito81

#4
Muchas gracias por responder ^Tifa^!!

Cierto es que no he explicado todo el problema. Te comento brevemente el script:
Lo que pretende es que pasado un directorio muestre cuantos archivos tiene ese directorio con el tamaño real, fisico, ... si tiene subdirectorios que entre en ellos y haga lo propio y finalmente me va a quedar una serie de filas con el la ruta del directorio/subdirectorio y la información antes mencionada y, además, la suma de todas ellas. Algo asi:

Path                                        T-Real  T-Fisico  N-Archivos
/home/Flakito81/directorio         1200     4096      13
/home/Flakito81/directorio/a      23        4096        1
/home/Flakito81/directorio/a/b   0          0             0
/home/Flakito81/directorio/otro  560      4096        3
Total                                        1783   12288      17


Obviamente como se puede intuir es una funcion recursiva.

El tema de ls  -sh   fichero lo contenplé pero no me sirve xq las cantidades están en diferentes unidades. Lo que si me interesa y quizas lo haga es hacer ese cambio de unidades para que sea más entendible, pero por ahora solo sabría hacerlo en la suma final .

Por ello opté por lo siguiente: (espero optimizarlo más, pero mi mente piensa en C :) )
Código (bash) [Seleccionar]

BLOCK=$(stat -c "%B" $0);
for f in `stat -c "%b" * | grep -v ^d |awk '{print $1}'`; do
       fsize=$((fsize+(f*BLOCK)))
done


Un abrazo!!! :P

PD: Disculpa como se muestra lo que debería ser la salida del script pero cuando he posteado lo alineé todo.

PD: Quizas esta semana muestre el código, junto con otro que tmb dije que subiría