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:
- -c permite dar formato a la información a mostrar.
- %s nos permite indicar que queremos mostrar el tamaño (en bytes) del fichero NOMBRE_FICHERO.
- 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
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
jeje, estuve buscando opciones; pero no, es la más sencilla.
Saludos.
Me gustaMe gusta
Facil, buena opcion para encontrar el tamaño.
Saludos
Me gustaMe gusta
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!
Me gustaMe gusta
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»)
Me gustaMe gusta
Me acabo de dar cuentas que si puedes elegir la unidad, prueba los switches -k y -m de du 😀
Me gustaMe gusta
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}
Me gustaMe gusta
No, si sólo era cuestión de tiempo que saliese el «querido» awk 😉
Gracias @Gelo por abrir el abanico de posibilidades para hacer una misma cosa (de ahí la grandeza del Software Libre y de todos vosotros que, lo creáis o no, formáis su Comunidad)
Me gustaMe gusta
pero tambien daria asi:
ls -l fichero.* | awk ‘{print$5}’
Me gustaMe gusta
como guardar en una variable : ls -l fichero.* | awk ‘{print$5}’
???
ayuda porfavor
Me gustaMe gusta
¿realmente necesitas meterlo en una variable (mira typeset -A si es así) o te bastaría con recorrer (bucle) los distintos valores que obtienes tras lanzar la instrucción?
Salu2
Me gustaMe gusta
Var=`ls -l fichero.* | awk ‘{print$5}’`
Me gustaMe gusta
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!
Me gustaMe gusta
mmmm … gracias Emilio me sirvio de mucho tu comentario (porque yo soy novata pues en esto de linux)
Me gustaMe gusta
Que bueno… chikos seguir asi… saludos …..me sirvio muchoooooooooo 🙂
Me gustaMe gusta
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
Me gustaMe gusta
Justo lo que buscaba, gracias
Me gustaMe gusta
en un script como puedo pasar el valor generado por stat a una variable para ser comparado?
Me gustaMe gusta
Tendría que hacer alguna prueba; te cuento cuando encuentre hueco para «jugar» con stat
Me gustaMe gusta
Gracias me salvaste, necesitaba esta información :D.
Me gustaMe gusta
No creo que llegue a tanto pero me alegra haber sido de utilidad
Salu2
Me gustaMe gusta
Este comando me vino como anillo al dedo!, justo lo que andaba buscando, saludos 🙂
Me gustaMe gusta
No sabes lo que me alegra oirlo. Un saludo Marco
Me gustaMe gusta
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.
Me gustaMe gusta