Obtener el tamaño de un fichero en Bash

null

Para un script en el que ando “trabajando” me ha hecho falta conocer el tamaño de determinado fichero.

Aunque desde la terminal bastaría con lanzar un “ls -l” necesitaba una forma más sencilla de obtener dicha información sin tener que recurrir a awk ni a expresiones regulares “pseudo-complejas”.

Por fortuna existe una solución que permite obtener dicha información (y otros datos de cualquier fichero del sistema) desde un script bash.

El comando que hace el milagro es stat que proviene del término inglés status.

Para obtener el tamaño de un fichero (en bytes) nada mejor que lanzar un

stat -c %s NOMBRE_FICHERO

Donde:

  1. -c permite dar formato a la información a mostrar.
  2. %s nos permite indicar que queremos mostrar el tamaño (en bytes) del fichero NOMBRE_FICHERO.
  3. NOMBRE_FICHERO es el fichero del cual deseamos obtener información.

Un ejemplo sería:

stat -c %s pelicula-divx.iso

Donde, como ya habrás podido adivinar, obtendremos el tamaño del fichero pelicula-divx.iso.

Ampliando las posibilidades

Como hemos indicado, con -c podemos definir el formato de la información de salida; así por ejemplo, lanzando un

stat -c “El tamaño de %n es %s bytes.” pelicula-divx.iso

Obtendremos
null

Para conocer otros parámetros interesantes (del estilo de %n y %s) no tienes más que consultar la ayuda del comando lanzando un

stat help

23 comentarios en “Obtener el tamaño de un fichero en Bash

  1. Yo conozco otra más sencilla, y que hasta convierte a unidades mas “legibles para humanos”: du

    Un ejemplo de uso: du -h miarchivo.iso
    O si queremos sin conversión de unidades: du miarchivo.iso
    O para un directorio: du -sh midirectorio/

    Pueden leer más sobre du corriendo du –help, o man du

    Un Saludo!

    • Toda la razón del mundo @Emilio, gracias por el aporte.

      Por ponerle alguna pega (y de paso defender la opción que planteo) es que no permite definir el formato de salida de la información si no es usando “complicadas” expresiones con awk y similares 😉

      De todos modos me ha encantado poder contar con una nueva opción (va de cabeza a la caja de herramientas) pues se me había escapado dicha posibilidad de du (nuevamente por no leer y limitarme a usar las cosas “conocidas”)

  2. Gelo dijo:

    ya veo que habeis dicho que el awk kk, pero a mi me resulta mas sencillo, hacer lo siguiente.

    ls -Shl fichero.txt

    Y en la quinta columna sale el tamaño del fichero. Si bien, lo que necesitas es solo el valor del tamaño…. pues el querido awk lo hace bien 😀

    ls -Shl fichero.txt | awk {print$5}

  3. lioner dijo:

    Sólo hacer una pequeña correción a gelo sobre el querido awk, faltan un par de ‘ (comillas simples) para que funcione, es decir:

    ls -Shl fichero.txt | awk ‘{print $5}’

    Saludos!

  4. wilson dijo:

    bueno stoy muy interesado en bash – linux alguien me puede ayudar:

    cd /home/user/$1

    pero si $1 se encuentra en /home/user/carpeta

    ayudaaaaaaaaaaaa de ante mano gracias

  5. Swicher dijo:

    Otra forma de hacerlo es con wc del siguiente modo:
    wc -c archivo.txt
    Si bien no puede formatear la salida como en stat, con lo siguiente es posible obtener solo el tamaño para guardarlo en una variable y luego usarlo en scripts mas complejos.
    cat archivo.txt | wc -c
    Cabe destacar que también puede mostrar el número de caracteres con -m, y con -l el numero de lineas que contiene un archivo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s