ver tamaño que por peso megas listar fichero comando carpetas archivos archivo bash

bash - que - ¿Cómo verificar el tamaño de un archivo?



ver tamaño de archivos ubuntu (12)

Basado en la respuesta de gniourf_gniourf,

find "file.txt" -size -90k

escribirá file.txt en stdout si y solo si el tamaño de file.txt es menor que 90K, y

find "file.txt" -size -90k -exec command /;

ejecutará el comando command si file.txt tiene un tamaño inferior a 90K. He probado esto en Linux. De find(1) ,

... Los siguientes argumentos de línea de comandos (las opciones -H , -L y -P ) se consideran nombres de archivos o directorios que se examinarán, hasta el primer argumento que comienza con ''-'', ...

(énfasis añadido).

Tengo un script que comprueba el tamaño 0, pero creo que debe haber una forma más fácil de verificar el tamaño de los archivos. Es decir file.txt es normalmente 100k; cómo hacer que un script compruebe si es inferior a 90k (incluido 0), y hacer que realice una nueva copia porque el archivo está dañado en este caso.

Lo que estoy usando actualmente ...

if [ -n file.txt ] then echo "everything is good" else mail -s "file.txt size is zero, please fix. " [email protected] < /dev/null # Grab wget as a fallback wget -c https://www.server.org/file.txt -P /root/tmp --output-document=/root/tmp/file.txt mv -f /root/tmp/file.txt /var/www/file.txt fi


En bash

if [ -s file.txt ]; then ... fi

también funcionaría


Esto funciona tanto en Linux como en Macos

function filesize { local file=$1 size=`stat -c%s $file 2>/dev/null` # linux if [ $? -eq 0 ] then echo $size return 0 fi eval $(stat -s $file) # macos if [ $? -eq 0 ] then echo $st_size return 0 fi return -1 }


Me sorprende que nadie mencionó la stat para verificar el tamaño del archivo. Algunos métodos son definitivamente mejores: usar -s para averiguar si el archivo está vacío o no es más fácil que cualquier otra cosa si eso es todo lo que quieres. Y si desea encontrar archivos de un tamaño, entonces find es definitivamente el camino a seguir.

También me gusta mucho para obtener el tamaño del archivo en kb, pero, para los bytes, usaría stat :

size=$(stat -f%z $filename) # BSD stat size=$(stat -c%s $filename) # GNU stat?


Para obtener el tamaño de archivo tanto en Linux como en Mac OS X (y presumiblemente otros BSD), no hay muchas opciones, y la mayoría de las que se sugieren aquí solo funcionarán en un sistema.

Dado f=/path/to/your/file ,

que funciona tanto en Linux como en Mac Bash:

size=$( perl -e ''print -s shift'' "$f" )

o

size=$( wc -c "$f" | awk ''{print $1}'' )

Las otras respuestas funcionan bien en Linux, pero no en Mac:

  • du no tiene una opción -b en Mac, y el truco BLOCKSIZE = 1 no funciona ("tamaño mínimo de bloques es 512", lo que conduce a un resultado incorrecto)

  • cut -d'' '' -f1 no funciona porque en Mac, el número puede alinearse a la derecha, rellenado con espacios al frente.

Por lo tanto, si necesita algo flexible, es el operador de perl -s o wc -c conectado a awk ''{print $1}'' (awk ignorará el espacio en blanco inicial).

Y, por supuesto, con respecto al resto de su pregunta original, use el operador -lt (o -gt ):

if [ $size -lt $your_wanted_size ]; then if [ $size -lt $your_wanted_size ]; then etc.


Si está buscando solo el tamaño de un archivo:

$ cat $file | wc -c > 203233


Si su find maneja esta sintaxis, puede usarla:

find -maxdepth 1 -name "file.txt" -size -90k

Esto generará file.txt para stdout si y solo si el tamaño de file.txt es inferior a 90k. Para ejecutar un script script si file.txt tiene un tamaño inferior a 90k:

find -maxdepth 1 -name "file.txt" -size -90k -exec script /;


solución alternativa con awk y doble paréntesis:

FILENAME=file.txt SIZE=$(du -sb $FILENAME | awk ''{ print $1 }'') if ((SIZE<90000)) ; then echo "less"; else echo "not less"; fi


[ -n file.txt ] no verifica su tamaño, comprueba que la cadena file.txt tenga una longitud distinta de cero, por lo que siempre tendrá éxito.

Si quiere decir "el tamaño no es cero", necesita [ -s file.txt ] .

Para obtener el tamaño de un archivo, puede usar wc -c para obtener el tamaño (longitud del archivo) en bytes:

file=file.txt minimumsize=90000 actualsize=$(wc -c <"$file") if [ $actualsize -ge $minimumsize ]; then echo size is over $minimumsize bytes else echo size is under $minimumsize bytes fi

En este caso, parece que eso es lo que quieres.

Pero para su información, si desea saber cuánto espacio de disco está usando el archivo, podría usar du -k para obtener el tamaño (espacio de disco utilizado) en kilobytes:

file=file.txt minimumsize=90 actualsize=$(du -k "$file" | cut -f 1) if [ $actualsize -ge $minimumsize ]; then echo size is over $minimumsize kilobytes else echo size is under $minimumsize kilobytes fi

Si necesita más control sobre el formato de salida, también puede mirar stat . En Linux, comenzarías con algo como stat -c ''%s'' file.txt , y en BSD / Mac OS X, algo así como stat -f ''%z'' file.txt .


stat parece hacer esto con la menor cantidad de llamadas al sistema:

$ set debian-live-8.2.0-amd64-xfce-desktop.iso $ strace stat --format %s $1 | wc 282 2795 27364 $ strace wc --bytes $1 | wc 307 3063 29091 $ strace du --bytes $1 | wc 437 4376 41955 $ strace find $1 -printf %s | wc 604 6061 64793


ls -l $file | awk ''{print $6}''

asumiendo que el comando ls informa sobre el tamaño del archivo en la columna # 6


python -c ''import os; print (os.path.getsize("... filename ..."))''

portátil, todos los sabores de pitón, evita la variación en dialectos de estadísticas