2012-02-08 13 views
15

Tengo un directorio con un montón de archivos Quiero encontrar el tamaño promedio de estos archivos algo así como ls algo así ¿Cuál es el tamaño medio de archivo de todo?Unix encontrar tamaño promedio de archivo

+1

Probablemente relacionado con esta pregunta (la solución probablemente sea canalizar la salida de 'ls' en' awk' para hacer el promedio): http://stackoverflow.com/questions/2419690/average-and-maximum-size- of-directories – DNA

+0

¿No es 'ls -l' enought? – sinsedrix

+1

'código' ls -l 'código' realmente no es total o promedio. – Tony

Respuesta

30

he encontrado algo aquí:
http://vivekjain10.blogspot.com/2008/02/average-file-size-within-directory.html

para calcular el tamaño promedio de los archivos dentro de un directorio en un sistema Linux, siguiente comando se puede utilizar:

ls -l | gawk '{sum += $5; n++;} END {print sum/n;}' 
+0

no estoy seguro de que importe pero estoy usando cygwin en un cuadro W2K8 R2 ... – Tony

+1

Debería funcionar, ¿lo intentó? ? Si obtienes 'no gawk', cambia a 'awk' Buena suerte. – shellter

+0

No parece que nada pase a la siguiente línea> – Tony

4

Utilice wc -c * para obtener el tamaño de todos los archivos y ls | wc -l para obtener el número de archivos. Entonces solo divide uno por el otro.

+0

nah Estaba buscando un comando como sugirió Ernstsson pero a cygwin no parece gustarle esa sintaxis :( – Tony

16

Un corto, general y recursion- la variación de la respuesta de usar Ernstsson 's:

find ./ -ls | awk '{sum += $7; n++;} END {print sum/n;}' 

O, por ejemplo, si yo Desea impedir que los archivos de más de 100 KB se cuezan en el promedio:

find ./ -size -100000c -ls | awk '{sum += $7; n++;} END {print sum/n;}' 
+0

@ A-B-B, ¿qué quieres decir? Todo esto funciona, lo he estado usando muchas veces. Proporcione más detalles sobre el problema que está teniendo, porque no tengo idea de lo que está hablando. – cnst

+0

@ A-B-B "Lanzado por el directorio actual, así como subdivisiones". - ¿Quiso decir que los directorios están incluidos en el cálculo del tamaño? Eso es muy intencional: la razón por la que escribí este script es para averiguar el tamaño promedio de archivos pequeños (y directorios) para determinar un buen bloque o tamaño de fragmento para 'mfs' (de lo contrario, usaría' -type f' con ['find'] (http://mdoc.su/o/find.1)). De ahí el ejemplo '-size', para dar cuenta de solo un par de archivos grandes. Tu -1 es muy inmerecido, y tus quejas de que no he probado esto son groseras, especialmente porque no hay nada de malo en la respuesta. – cnst

+1

La razón por la que la está usando es interesante pero irrelevante. Si lo que quiero es el tamaño promedio del archivo, como se indica en la pregunta original, presumiblemente no quiero que los directorios afecten a este número, ¡punto! En cuanto al -1, no es solo para ti; la respuesta principal también lo consiguió. –

2

du -sh. # da el espacio total utilizado por el directorio

buscar. -type f | wc -l # contar el número de archivos

devide el primero por el segundo. Si quieres un chiste, aquí está:

echo $((`du -sb | tr '.' ' '`/`find . -type f | wc -l`)) 
+0

FYI, esto utiliza du's '-b equivalente a' --aparente-tamaño --block-size = 1'' – Xen2050

1

Ellos están encontrando el tamaño de un directorio y encontrar la cantidad de espacio libre en disco que existe en su máquina. El comando que usaría para encontrar el tamaño del directorio es 'du'. Y para encontrar el espacio libre en el disco, podría usar 'df'.

Toda la información presente en este artículo está disponible en las páginas man para du y df. En caso de que te aburras al leer las páginas man y quieras hacer tu trabajo rápidamente, entonces este artículo es para ti.

-

'du' - Encontrar el tamaño de un directorio

$ du 

Escribiendo lo anterior en el indicador le da una lista de directorios que existen en el directorio actual, junto con sus tamaños. La última línea del resultado le da el tamaño total del directorio actual, incluidos sus subdirectorios. El tamaño proporcionado incluye los tamaños de los archivos y los directorios que existen en el directorio actual, así como todos sus subdirectorios. Tenga en cuenta que, de forma predeterminada, los tamaños indicados están en kilobytes.

**$ du /home/david** 

El comando anterior le daría el tamaño del directorio del directorio/home/David

**$ du -h** 

Este comando le da un mejor rendimiento que el que viene por defecto. La opción '-h' significa formato legible para humanos. Entonces, los tamaños de los archivos/directorios tienen esta vez el sufijo con una 'k' si es kilobytes y 'M' si es Megabytes y 'G' si es Gigabytes.

**$ du -ah** 

Este comando mostrará en su producción, no sólo los directorios sino también todos los archivos que están presentes en el directorio actual. Tenga en cuenta que 'du' siempre cuenta todos los archivos y directorios mientras da el tamaño final en la última línea. Pero la '-a' muestra los nombres de los archivos junto con los nombres de los directorios en la salida. '-h' es, una vez más, formato legible para humanos.

**$ du -c** 

Esto le da un gran total como la última línea de la salida. Entonces, si su directorio ocupa 30 MB, las últimas 2 líneas de la salida serían

30M. 30M total

La primera línea sería la última línea predeterminada de la salida 'du' que indica el tamaño total del directorio y otra línea que muestra el mismo tamaño, seguida de la cadena 'total'. Esto es útil en caso de que este comando junto con el comando grep solo muestre el tamaño total final de un directorio como se muestra a continuación.

**$ du -ch | grep total** 

Esto tendría sólo una línea en su salida que muestra el tamaño total del directorio actual, incluyendo todos los subdirectorios.

Nota: En caso de que no esté familiarizado con las tuberías (lo que hace posible el comando anterior) consulte el Artículo No. 24. También grep es uno de los comandos más importantes en Unix. Consulte el Artículo No. 25 para saber más sobre grep.

**$ du -s** 

Aquí se muestra un resumen del tamaño del directorio. Es la forma más sencilla de conocer el tamaño total del directorio actual.

**$ du -S** 

Esto mostraría el tamaño del directorio actual, excluyendo el tamaño de los subdirectorios que existen dentro de ese directorio. Por lo tanto, básicamente te muestra el tamaño total de todos los archivos que existen en el directorio actual.

**$ du --exculde=mp3** 

El comando anterior mostraría el tamaño del directorio actual, junto con todos sus subdirectorios, pero sería excluir todos los archivos que tienen el patrón dado presente en sus nombres de archivo. Por lo tanto, en el caso anterior si sucede que hay archivos mp3 dentro del directorio actual o cualquiera de sus subdirectorios, su tamaño no se incluiría al calcular el tamaño total del directorio.

  • 'df' - encontrar el uso de espacio libre en disco/disco

    $ df

Escribiendo lo anterior, da salida a una tabla que consta de 6 columnas. Todas las columnas son muy fáciles de entender. Recuerde que las columnas 'Tamaño', 'Usado' y 'Disponibilidad' usan kilobytes como unidad. La columna 'Usar%' muestra el uso como un porcentaje que también es muy útil.

**$ df -h** 

Muestra el mismo resultado que el comando anterior, pero el '-h' indica formato legible por humanos. Por lo tanto, en lugar de kilobytes como la unidad, la salida tendría 'M' para Megabytes y 'G' para Gigabytes.

La mayoría de los usuarios no utilizan los otros parámetros que se pueden pasar a 'df'. Entonces no los discutiré.

A su vez, mostraré un ejemplo que utilizo en mi máquina. De hecho, he almacenado esto como un script llamado 'uso' ya que lo uso a menudo.

Ejemplo:

tengo mi Linux instalado en/dev/hda1 y he montado mis particiones de Windows, así (por defecto cada vez que Linux arranque). Entonces 'df' me muestra de forma predeterminada el uso del disco de mi Linux así como de las particiones de Windows. Y solo me interesa el uso del disco de las particiones de Linux. Esto es lo que yo uso:

**$ df -h | grep /dev/hda1 | cut -c 41-43** 
pantallas

Este comando lo siguiente en mi máquina

45%

Básicamente este comando hace 'df' mostrar los usos de disco de todas las particiones y luego se extrae la líneas con/dev/hda1 ya que solo estoy interesado en eso. Luego corta los caracteres de la columna 41 a la 43, ya que son las columnas que muestran el uso en%, que es lo que quiero.

Hay algunas opciones más que se pueden utilizar con 'du' y 'df'. Podrías encontrarlos en las páginas man.

Cuestiones relacionadas