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!!
Hola Flakito81 :-*
Querras considerar el comando:
bash$ du -sh fichero
Puede ser fichero o carpeta vamos loquesea.
Besis :-*
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:
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
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 :)
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.
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 :) )
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